箱线图和分组:关于分组和共享x轴的问题

3

这是我的数据集:

df
    A    B      C
0  13  Yes  False
1  12   No   True
2   2  Yes   True
3  12   No  False
4   4   No   True
5   1  Yes   True
6   1   No  False
7   5   No   True
8  15  Yes  False

而且
df2
    A    B      C
0  13  Yes  False
1  12   No  False
2  11   No  False
3  15  Yes  False
4  12   No  False
5  21  Yes  False

以下是有问题的代码:

fig, ax = plt.subplots(2,1, sharey="all", sharex="all")
df2.boxplot("A", by=["B","C"], ax=ax[0])
df.boxplot("A", by=["B","C"], ax=ax[1])

这个问题是,上面的子图中,右侧的箱线图应该向右移动1个单位,以与(Yes, False)标签对齐。

我认为这是因为sharex并不关心xticklabels,而是xticks的值(分别为[1,2][1,2,3,4])。 我可以使用df2.boxplot中的positions=[1,3]参数来解决这个问题。

但问题是,如何在没有先验知识的情况下解决这个问题?

此外,这可能是Pandas或Matplotlib的错误,还是由于某种原因而期望出现这种行为?


你尝试过这里的答案吗:https://dev59.com/Vc9p0YgBFxS5KdRj-uaS? - cphlewis
1个回答

2
import seaborn as sns
import pandas as pd
df = pd.DataFrame([[13, 'Yes', False],
       [12, 'No', True],
       [2, 'Yes', True],
       [12, 'No', False],
       [4, 'No', True],
       [1, 'Yes', True],
       [1, 'No', False],
       [5, 'No', True],
       [15, 'Yes', False]],
       columns = list('ABC'))
df2 = pd.DataFrame([[13, 'Yes', False],
       [12, 'No', False],
       [11, 'No', False],
       [15, 'Yes', False],
       [12, 'No', False],
       [21, 'Yes', False]],
       columns = list('ABC'))
df['i'] = 1
df2['i'] = 2
dfb = pd.concat([df,df2])
dfb['B,C'] = map(lambda x,y: '%s, %s'%(str(x),str(y)), dfb.B, dfb.C)
dfb2 = pd.DataFrame(dfb, columns=['A','i','B,C'])
sns.factorplot('B,C', row='i',y='A', kind='box', data=dfb2)

enter image description here

为了区分每个数据框,我添加了一个标识符i,并将现有变量B,C组合在一起,以便将它们作为x参数传递给factorplot。这是为了尝试复制您的图形。让factorplot多做一些工作:

dfc = pd.concat([df,df2])
sns.factorplot('B', row='i', col='C', y='A', kind='box', data=dfc)

enter image description here

这确实清楚地表明了哪个案例没有任何数据!


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