2017-09-29 7 views
0

とデータフレームにあるリストの各要素は、私はこのような要素のリストを含むデータフレームを持っている: enter image description hereパイソン:プロットseaborn facetWrap

I 10の刺激値と刺激あたり16回の試験を持っています。リストには、スパイクトレインのスパイク振幅値が含まれています。したがって、例えばある場合。 2つの値33と34のリストで、私のアルゴリズムは33mVと34mVの2つのスパイクを見つけました。私は自分のデータの印象を得るためにこれらの値をすべてプロットしたいと思います。

現在、私は明らかにそれが平均(すべての値をプロットだけリストごとにしないのですか?最初にこのプロットに

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

を。なぜここにいないの?それがなければ、問題を理解することも本当に難しいです。 – ImportanceOfBeingErnest

+0

私は同意します。理由は、データフレームに2次元のリストを入れて、私が持っているデータを複製できる方法を知らないからです。私はこのようなデータベクトルを作成しました:np.random.random((160、4))しかし、パンダは2次元配列を受け入れません。 –

+1

'df = pd.DataFrame({" x ":np.linspace(0,1,50)})のようなものを試してみてください。 df ["listcol"] = [np.random.rand(4).tolist()for i in range(50)] '。 – ImportanceOfBeingErnest

答えて

1

私のデータフレームを構築し、私はあなたが望むものを達成する唯一の方法は、長いフォームに1列でリストをデータフレームに変換することであると思い、そのような各そのリストエントリは、データフレーム内に独自の行を持ちます。可能な方法については、this questionを参照してください。質問からのデータの提示方法を使用して

はあなたに与えます:あなたは[MCVE]を提供したあなたの最後の質問で

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

もっと完璧な結果を求めることはできませんでした。私はあなたに借りができた。 –

関連する問題