来自多个数据框列的分类数据的散点图

时间:2017-01-02 10:07:29

标签: python pandas matplotlib dataframe seaborn

我有一个像这样的DataFrame df

   name         Int1        Int2         Int3
0     foob -2.534519e-05 -1.156744e-04 -1.410195e-04
1     arz  2.907239e-04  3.502863e-04  6.410102e-04
2     foo2 -2.140769e-04  4.214626e-04  2.073857e-04
3     bar  3.366116e-03 -6.125303e-04  2.753586e-03
4     rnd -5.014413e-05 -6.740579e-06 -5.688471e-05
5     baz  3.334906e-04 -7.846232e-05  2.550283e-04
6     rnd2 -6.111069e-04  2.194443e-03  1.583336e-03
7     tet  3.184057e-04  2.208398e-04  5.392455e-04

应将df绘制为散点图,描绘每个名称的三个数据点(Int1,Int2,Int3)。

目前,我正在使用 seaborn stripplot函数,如果我将每个单独的列(例如x = name,y = Int1)的图分配给它,它的工作正常图的轴:

fig, ax = plt.subplots()
seaborn.stripplot(df.name, df.Int1, ax=ax, c='red')
seaborn.stripplot(df.name, df.Int2, ax=ax, c='blue')

但是,我想以更好的方式绘制这一点,主要原因是拥有合适的图例和更好的自定义。解决方案也可以是 pandas

1 个答案:

答案 0 :(得分:2)

这是我的解决方案。其实很简单:

df_melt=pd.melt(df,id_vars=['name'], var_name='intensities', value_name='values')
sns.stripplot(x="name", y="values", data=df_melt, hue='intensities')

这需要原始的df并在 pandas melt函数的帮助下,生成一个包含单个intensities列的新df,每列有一行每个名称的Int1Int2Int3值。 第二行使用 seaborn stripplot来绘制由df_meltInt1和{{1}列着色的Int2 }}