python中按列分层的箱线图
我想为以下数据框绘制一个箱线图:python中按列分层的箱线图,python,matplotlib,pandas,boxplot,Python,Matplotlib,Pandas,Boxplot,我想为以下数据框绘制一个箱线图: > p1.head(10) N0_YLDF MAT 0 1.29 13.67 1 2.32 10.67 2 6.24 11.29 3 5.34 21.29 4 6.35 41.67 5 5.35 91.67 6 9.32 21.52 7 6.32 31.52 8 3.33 13.52 9 4.56 44.52 我希望箱线图为“N0_YLDF”
> p1.head(10)
N0_YLDF MAT
0 1.29 13.67
1 2.32 10.67
2 6.24 11.29
3 5.34 21.29
4 6.35 41.67
5 5.35 91.67
6 9.32 21.52
7 6.32 31.52
8 3.33 13.52
9 4.56 44.52
我希望箱线图为“N0_YLDF”列,但它们应按“MAT”分层。当我使用foll时。命令:
p1.boxplot(column='N0_YLDF',by='MAT')
它使用所有唯一的MAT值,这些值在整个p1数据帧编号中约为15000。这导致了无法理解的箱线图
是否有任何方法可以对MAT值进行分层,以便得到不同的N0_YLDF箱线图,用于MAT值的第一个四分位,等等
谢谢
pandas.qcut
将为您提供分位数,但类似直方图的操作需要一些numpy
技巧,这在这里很方便:
_, breaks = np.histogram(df.MAT, bins=5)
ax = df.boxplot(column='N0_YLDF', by='Class')
ax.xaxis.set_ticklabels(['%s'%val for i, val in enumerate(breaks) if i in df.Class])
数据帧现在看起来如下所示:
N0_YLDF MAT Class
0 1.29 13.67 1
1 2.32 10.67 0
2 6.24 11.29 1
3 5.34 21.29 1
4 6.35 41.67 2
5 5.35 91.67 5
6 9.32 21.52 1
7 6.32 31.52 2
8 3.33 13.52 1
9 4.56 44.52 3
[10 rows x 3 columns]
它还可用于获得四分位图:
breaks = np.asarray(np.percentile(df.MAT, [25,50,75,100]))
df['Class'] = (df.MAT.values > breaks[..., np.newaxis]).sum(0)
ax = df.boxplot(column='N0_YLDF', by='Class')
ax.xaxis.set_ticklabels(['%s'%val for val in breaks])
熊猫有
cut
和qcut
功能,可以轻松地对变量进行分层:
# Just asking for split into 4 equal groups (i.e. quartiles) here,
# but you can split on custom quantiles by passing in an array
p1['MAT_quartiles'] = pd.qcut(p1['MAT'], 4, labels=['0-25%', '25-50%', '50-75%', '75-100%'])
p1.boxplot(column='N0_YLDF', by='MAT_quartiles')
输出:
太好了,再次感谢您!是否有任何方法可以用实际的MAT分位数值替换x轴标签?这很简单,如果绘图返回为
ax
,则可以使用breaks
:添加此ax.xaxis.set_ticklebals(['%s'%val for i,val in enumerate(breaks)in if i in df.Class])
,中断
包含直方图的bin边。感谢进一步编辑。我正在尝试使用pyplot.setp(ax['box',color='blue')更改箱线图中方框的颜色。但是,我得到错误“AxesSubplot”对象不可订阅”。你知道如何避免这个错误吗?谢谢啊,我找到了你(@CT Zhu)关于箱线图样式的回复。这很有效:很高兴听到这个。有时我甚至会找到自己的答案。快乐编码@马吕斯想做一个拉请求,将其添加到cookbook.rst?请以内联方式进行操作,以便图中所示的代码也与此代码一起显示-同时包含指向此问题的链接-thanks@Jeff:当然可以,我今晚会尽量抽出时间来做的。我一直想看看是否有任何有用的贡献,我可以添加到熊猫,这看起来是一个好地方开始。太好了!仅供参考,我想把更多的烹饪书的例子内联(他们现在大多是链接),所以如果你有时间,这将是非常有帮助的!