複数の列と多くの行を持つdataFrameがあります。多くの行には列の値がないため、データフレームではNaNとして表されます。 dataFrameの例は次のとおりです。
df.head()
GEN Sample_1 Sample_2 Sample_3 Sample_4 Sample_5 Sample_6 Sample_7 Sample_8 Sample_9 Sample_10 Sample_11 Sample_12 Sample_13 Sample_14
A123 9.4697 3.19689 4.8946 8.54594 13.2568 4.93848 3.16809 NAN NAN NAN NAN NAN NAN NAN
A124 6.02592 4.0663 3.9218 2.66058 4.38232 NAN NAN NAN NAN NAN NAN NAN
A125 7.88999 2.51576 4.97483 5.8901 21.1346 5.06414 15.3094 2.68169 8.12449 NAN NAN NAN NAN NAN
A126 5.99825 10.2186 15.2986 7.53729 4.34196 8.75048 16.9358 5.52708 NAN NAN NAN NAN NAN NAN
A127 28.5014 4.86702 NAN NAN NAN NAN NAN NAN NAN NAN NAN NAN NAN NAN
pythonからseaborn関数を使用して、このdataFrameのヒストグラムをプロットしたかったので、次の行を試していました。
sns.set(color_codes=True)
sns.set(style="white", palette="muted")
sns.distplot(df)
しかし、次のエラーがスローされます。
ValueError Traceback (most recent call last)
<ipython-input-80-896d7fe85ef3> in <module>()
1 sns.set(color_codes=True)
2 sns.set(style="white", palette="muted")
----> 3 sns.distplot(df)
/anaconda3/lib/python3.4/site-packages/seaborn/distributions.py in distplot(a, bins, hist, kde, rug, fit, hist_kws, kde_kws, rug_kws, fit_kws, color, vertical, norm_hist, axlabel, label, ax)
210 hist_color = hist_kws.pop("color", color)
211 ax.hist(a, bins, orientation=orientation,
--> 212 color=hist_color, **hist_kws)
213 if hist_color != color:
214 hist_kws["color"] = hist_color
/anaconda3/lib/python3.4/site-packages/matplotlib/axes/_axes.py in hist(self, x, bins, range, normed, weights, cumulative, bottom, histtype, align, orientation, rwidth, log, color, label, stacked, **kwargs)
5627 color = mcolors.colorConverter.to_rgba_array(color)
5628 if len(color) != nx:
-> 5629 raise ValueError("color kwarg must have one color per dataset")
5630
5631 # We need to do to 'weights' what was done to 'x'
ValueError: color kwarg must have one color per dataset
このエラーを取り除くための助け/提案は大歓迎です.. !!!
また、 seaborn
document は、複数の列を同時にプロットし、デフォルトで色で強調表示できると述べていると思いました。
しかし、読み直しても何も見えませんでした。代わりに、私はそれを このチュートリアル から推測したと思います。途中で、チュートリアルは複数の列を持つデータフレームをプロットします。
ただし、「解決策」は簡単であり、うまくいけば、まさにあなたが探しているものです。
sns.set(color_codes=True)
sns.set(style="white", palette="muted")
sns.distplot(df)
for col_id in df.columns:
sns.distplot(df[col_id])
デフォルトでは、これにより色が変更され、どちらがすでに使用されているかが「わかります」。
注:自分のデータセットを再作成する方法がわからなかったため、別のデータセットを使用しました。
上に示したデータからの抜粋があると仮定しましょう(私のマシンではNAN
がNaN
であるという違いだけがあります)。
次に、私が考えることができる最良のグラフィック表現は、グループ化されたバープロットです。サンプルごとに1つのグループ、すべてのグループ内に遺伝子バーがあります(このヒストグラムを時々呼ぶ人もいます)
これを行うには、最初にR
パーラーでデータを「溶かす」、つまり「長く」する必要があります。次に、プロットを続行できます。
data = df.set_index('GEN').unstack().reset_index()
data.columns = ['sample','GEN', 'value']
sns.set(style="white")
g = sns.factorplot(x='sample'
,y= 'value'
,hue='GEN'
,data=data
,kind='bar'
,aspect=2
)
g.set_xticklabels(rotation=30);
これがあなたが求めていたタイプのプロットであるかどうかをお知らせください。