Pandas 箱线图,子图中的不同 y 轴

Vit*_*ous 3 python matplotlib pandas

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

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

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])}
Run Code Online (Sandbox Code Playgroud)

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

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

输出是这样的

箱线图输出

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

Sco*_*ton 7

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

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

输出:

在此输入图像描述


Diz*_*ahi 6

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

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

在此输入图像描述