Python:用 groupby 绘制熊猫数据框 - 奇怪的输出

Posted

技术标签:

【中文标题】Python:用 groupby 绘制熊猫数据框 - 奇怪的输出【英文标题】:Python: plot panda dataframe with groupby - weird output 【发布时间】:2018-03-10 15:16:21 【问题描述】:

我有一个数据框(对象类型,出于事先在某些步骤中插入列表的原因),其中三列看起来像这样

    data  stimulus trial
0   2     -2       1
1   2     -2       2
2   2     -2       3
3   2     -2       4
4   2     -2       5
5   2     -2       6
6   1     -2       7
...
159 1     2.5      16

目前我正在使用 seaborn,但在我的情节中插入适当的图例时遇到了困难。

# spi_num is my dataframe
sns.swarmplot(x="stimulus", y="data", data=spi_num.astype(np.float), edgecolor="black", linewidth=.9)
sns.boxplot(x="stimulus", y="data", data=spi_num.astype(np.float), saturation=1)

所以我有两个问题。如何顺利地将传奇与 seaborn 融合?以及如何使用 pandas plot 命令获得这个情节?我想我需要这样的东西:

spi_num.astype(np.float).groupby('stimulus').plot.box()

然后我得到 10 个数字(每个刺激一个),每个 xlabel 有 3 个箱线图,即“数据”、“刺激”和“试验”。这不应该给我一个如上图所示的情节吗?至少he does it like this。


构建我的数据框

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_num      = pd.DataFrame('trial': trial_vec, 'stimulus': stimulus_vec, 'data': data_vec).astype('object')

【问题讨论】:

【参考方案1】:

您可以使用DataFrame.boxplot 获得所需的箱线图

spi_num.astype(np.float).boxplot(column="data", by="stimulus")

【讨论】:

不错!太简单。你还知道如何在 seaborn 情节中添加图例吗? 这是一个完全不同的问题。你用谷歌搜索过“seaborn legend”吗? 我知道,但我都发布了,这就是我问的原因。是的,我用谷歌搜索过,但它看起来太复杂了,无法成为唯一的解决方案。 您不应该在一个问题中发布两个问题 - 仅此一项通常足以将关于 SO 的问题关闭为“过于宽泛”。我的策略通常是只选择一个似乎更难解决的问题,或者一个显示一些尝试过的解决方案的问题,而忽略其他问题。 好的,那我复制粘贴到一个新问题上。感谢您提出更难的问题!

以上是关于Python:用 groupby 绘制熊猫数据框 - 奇怪的输出的主要内容,如果未能解决你的问题,请参考以下文章

熊猫数据框:groupby 和 plot 有两个不同的列

groupby - python 熊猫数据框

如何在python的这个熊猫数据框中使用groupby或pivot [重复]

根据不均匀的日期重新索引熊猫数据框,然后用 groupby 和空白填充某些值

用熊猫在列中绘制带有年份的数据框

熊猫数据框:用分组绘制直方图