【发布时间】:2017-10-24 10:22:06
【问题描述】:
我想根据一个标准为几个数据集绘制箱线图。 想象一个类似于以下示例的数据框:
df = pd.DataFrame({'Group':[1,1,1,2,3,2,2,3,1,3],'M':np.random.rand(10),'F':np.random.rand(10)})
df = df[['Group','M','F']]
Group M F
0 1 0.465636 0.537723
1 1 0.560537 0.727238
2 1 0.268154 0.648927
3 2 0.722644 0.115550
4 3 0.586346 0.042896
5 2 0.562881 0.369686
6 2 0.395236 0.672477
7 3 0.577949 0.358801
8 1 0.764069 0.642724
9 3 0.731076 0.302369
在这种情况下,我有三个组,所以我想为每个组制作一个箱线图,并为 M 和 F 分别制作 Y 轴上的组和 M 和 F 的列颜色编码。 This answer 非常接近我想要实现的目标,但我更喜欢更健壮的东西,适用于具有更多组数的更大数据帧。我觉得 groupby 是要走的路,但我对 groupby 对象不熟悉,我什至没有对它们进行切片。 .理想的输出如下所示:
好像几年前,有人遇到过同样的问题,但没有得到答案:(Having a boxplot as a graphical representation of the describe function of groupby
我的问题是:
- 如何实现 groupby 以将所需数据输入箱线图
- 如果我想控制显示的内容而不仅仅是使用默认设置(我什至不知道它们是什么,我发现文档相当模糊,那么箱线图的正确语法是什么。具体来说,我可以让盒子覆盖平均值 +/- 标准差,并将垂直线保持在中值吗?)
【问题讨论】:
-
您尝试了一些代码吗?你遇到了什么样的问题/错误?
-
import matplotlib.pyplot as plt 然后 df.boxplot(['M','F'],'Group')
-
这将根据组为男性和女性生成 2 个单独的图。
-
正如你所说,这会生成单独的子图,它不会将它们绘制在一起。另外,它没有解决第 2 点。但是,谢谢,对于一个更简单的情况,很高兴知道它是多么容易完成。
-
请试试这个,它会给你 x 轴上的 4 个四分位数 df.boxplot(by='Group',vert=False) 很难在一个图中得到所有变量我们也在同时应用 groupby 操作,但我们可以得到多个图取决于按分组变量分组的变量的基础。
标签: python boxplot pandas-groupby