熊猫盒图,子图中的不同y轴

时间:2018-07-25 20:40:51

标签: python pandas matplotlib

首先,要说。我知道类似的问题,即with Git 2.9.1+pandas-boxplot-groupby-different-ylim-in-each-subplot,但我仍然无法通过数据集获得所需的结果。我有一个废水样本的数据集,其中的列是不同的污染物,行带有三个不同组的“代码”:

数据集看起来像这样(但更大)

data = pd.DataFrame({'Group': pd.Series(['IN', 'IN', 'IN', 'OUT', 'OUT', 'OUT']),
                  'COD' : pd.Series([800, 900, 100, 400, 450, 500]),
                  'BOD' : pd.Series([40, 50, 60, 20, 25, 30])}

和我的箱线图代码(在带有matplotlib内联的jupyter中)

fig, ax = plt.subplots(figsize=(10,  5))
data.boxplot(['COD','BOD'], 'Group', ax)

输出是这样的

boxplot output

很显然,所有数据的y轴都不相同,但是即使在上面的链接的帮助下,我也无法以这种方式重新创建输出来更改单个子图的轴。对此,我将不胜感激。

2 个答案:

答案 0 :(得分:3)

您需要在调用sharey=False之前强制使用DataFrame.boxplot() 来创建轴,以强制不共享y轴限制。 但是您必须小心提供正确的轴数,否则,熊猫将被迫清除图形并创建自己的轴(然后共享它们的y轴)。

fig, axs = plt.subplots(1,len(data.Group.unique()),figsize=(10,  5), sharey=False)
data.boxplot(['COD','BOD'], 'Group', axs)

enter image description here

答案 1 :(得分:1)

执行此操作的一种方法是为子图创建不同的轴并分别绘制数据框列:

fig, ax = plt.subplots(1, 2, figsize=(10, 5))
data.boxplot('COD','Group', ax=ax[0])
data.boxplot('BOD','Group', ax=ax[1])

输出:

enter image description here