Pandas箱线图X轴设置

5

我想创建一个箱线图,用于展示四个不同站点在过去20年中收集的数据(即每个站点将有20年的数据)。这将在图中产生80个箱子。为了使图表易读,我希望每个箱子都被偏移,并且每个站点有不同的颜色箱子。这将产生一系列重复的箱子(例如站点1、2、3、3、1、2、3的箱子......)。创建箱线图并不是问题;但偏移箱子似乎是个问题。例如:

import numpy as np
import pandas as pd
from pylab import *

first  = pd.DataFrame(np.random.rand(10,5),columns=np.arange(0,5))
second = pd.DataFrame(np.random.rand(10,5),columns=np.arange(5,10))

fig = figure( figsize=(9,6.5) )
ax  = fig.add_subplot(111)

box1 = first.boxplot(ax=ax,notch=False,widths=0.20,sym='',rot=-45)
setp(box1['caps'],color='r',linewidth=2)
setp(box1['boxes'],color='r',linewidth=2)
setp(box1['medians'],color='r',linewidth=2)
setp(box1['whiskers'],color='r',linewidth=2,linestyle='-')

box2 = second.boxplot(ax=ax,notch=False,widths=0.20,sym='',rot=-45)
setp(box2['caps'],color='k',linewidth=2)
setp(box2['boxes'],color='k',linewidth=2)
setp(box2['medians'],color='k',linewidth=2)
setp(box2['whiskers'],color='k',linewidth=2,linestyle='-')

最初我希望Pandas会按列名索引x轴,但是Pandas似乎根据列位置索引x轴,这令人沮丧。有人能推荐一种方法来偏移框,使它们不会彼此重叠吗?

1个回答

5

您需要指定栏的位置:

box1 = first.boxplot(ax=ax,notch=False,widths=0.20,sym='',rot=-45, positions=np.arange(0.0,4.0,1.0))
box2 = second.boxplot(ax=ax,notch=False,widths=0.20,sym='',rot=-45, positions=np.arange(0.3,4.3,1.0))

或者您可以将盒子移动到您喜欢的一侧(这样做的额外好处是保持标签居中):

disp = 0.15
for k in box1.keys():
    for line1,line2 in zip(box1[k],box2[k]):
        setp(line1,xdata=getp(line1,'xdata') - disp)
        setp(line2,xdata=getp(line2,'xdata') + disp)

谢谢xndrme,但目标是将所有内容放在一个图中(即同一子图)。 - tnknepp
@tnknepp 不用谢。如果你感兴趣,我已经添加了一种移动盒子的方法,使列标签保持居中。 - Alvaro Fuentes
太好了,这样就不用自己琢磨了。再次感谢。 - tnknepp

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接