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

问题描述 投票:0回答:2

首先要说的是。我知道类似的问题,即 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])})

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

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

输出是这样的

boxplot output

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

python pandas matplotlib
2个回答
7
投票

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

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


7
投票

您需要使用

sharey=False
before 调用
DataFrame.boxplot()
创建轴以强制不共享 y 轴限制。 但是你必须小心提供正确数量的轴,否则 pandas 被迫清除图形并创建它自己的轴(然后共享它们的 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

© www.soinside.com 2019 - 2024. All rights reserved.