2017-09-29 25 views
0

我有一个包含元素列表这样一个数据帧的每个元素: enter image description here的Python:情节中列出了在一个数据帧与seaborn facetWrap

我有10个刺激值和每刺激16个试验。列表包含尖峰列车的尖峰振幅值。所以如果有例如列表中有两个值33和34,我的算法发现了两个33mV和34mV的尖峰。我想绘制所有这些值来获得我的数据印象。

目前我使用这些代码来获得该地块

flatui = ["#9b59b6", "#3498db", "#95a5a6", "#e74c3c", "#34495e", "#2ecc71"] 
g = sns.FacetGrid(df, col='stimulus', col_wrap=5, sharey=True, sharex=True) 
g.map(sns.swarmplot, 'trial', 'data', edgecolor="black", linewidth=.9, palette=flatui) 
g.set_axis_labels('trials', '[ms]') 

enter image description here

显然它并不绘制所有的值,但只有每个列表(一个意思呢?第一?我不知道)。你能帮我一次把所有的人都画出来吗?


建立我的数据框

trial_vec  = np.tile(np.arange(16)+1, 10)  
stimulus_vec = np.repeat([-2., -1.75, -1., -0.75, -0.5, 0.5, 1., 1.25, 1.75, 2.5 ], 16)     
data_vec  = np.random.randint(0, 16, size=160) 
spi_amp   = pd.DataFrame({'trial': trial_vec, 'stimulus': stimulus_vec, 'data': data_vec}).astype('object') 
spi_amp["data"] = [np.random.rand(4).tolist() for i in range(160)] 
spi_amp 
+0

在你最后的问题,你没有提供[MCVE。为什么不在这里?没有它,甚至很难理解这个问题。 – ImportanceOfBeingErnest

+0

我同意。原因是我不知道如何将二维列表放入数据框,以便我可以复制我拥有的数据框。我创建了这样的数据向量:np.random.random((160,4)),但熊猫不接受这样的二维数组。 –

+1

尝试类似'df = pd.DataFrame({“x”:np.linspace(0,1,50)}); df [“listcol”] = [np.random.rand(4).tolist()for i in range(50)]'。 – ImportanceOfBeingErnest

回答

1

思考,我想只有这样,才能实现你想要的是与列表中的数据框转换一个列到一个长形,使得每个列表条目在数据框中有自己的行。有关执行此操作的可能方法,请参见this question

使用从问题的数据所介绍的方法给你:

import numpy as np 
import pandas as pd 
import seaborn as sns 
import matplotlib.pyplot as plt 

trial_vec  = np.tile(np.arange(16)+1, 10)  
stimulus_vec = np.repeat([-2., -1.75, -1., -0.75, -0.5, 0.5, 1., 1.25, 1.75, 2.5 ], 16)     
data_vec  = np.random.randint(0, 16, size=160) 
df   = pd.DataFrame({'trial': trial_vec, 'stimulus': stimulus_vec}).astype('object') 
df["data"] = [np.random.rand(4).tolist() for i in range(160)] 

# convert dataframe to long form 
df2 = df.set_index(['trial', 'stimulus'])['data'].apply(pd.Series).stack() 
df2 = df2.reset_index() 
df2.columns = ['trial', 'stimulus','pos','data'] 

# the plotting code stays the same 
flatui = ["#9b59b6", "#3498db", "#95a5a6", "#e74c3c", "#34495e", "#2ecc71"] 
g = sns.FacetGrid(df2, col='stimulus', col_wrap=5, sharey=True, sharex=True) 
g.map(sns.swarmplot, 'trial', 'data', edgecolor="black", linewidth=.9, palette=flatui) 
g.set_axis_labels('trials', '[ms]') 

plt.show() 

enter image description here

+0

不能要求更多,完美的结果。我欠你。 –

相关问题