首页 > 解决方案 > Matplotlib - 图相互堆叠

问题描述

我正在尝试使用 fig (ax) 方法可视化两个 Seaborn 箱线图,如下所示:

import pandas as pd
import matplotlib.pyplot as plt
import seaborn as sns


sns.set_palette('colorblind')
sns.set_style('white')



prd_data = pd.read_csv("Products 20171001-20200825.csv", sep=';', decimal=',')
prd_data['Product'].replace('Prd', 'Product ', regex=True, inplace=True)
prd_data_ess = prd_data.loc[prd_data['Base Type'] == 'ESS']
prd_data_premium = prd_data.loc[prd_data['Base Type'] == 'PRM']


fig, (ax0,ax1) = plt.subplots(2,1, figsize=(12,6), sharex=True, sharey=True)
ax0 = sns.boxplot(y='Product', x='Update Minutes', data=prd_data_ess, orient='h', \
                 order=['Product 1', 'Product 2', 'Product 3', 'Product 4'], \
                 boxprops=dict(alpha=0.3), color='#05BDC7')

ax0.set_xlim(0)
ax0.set_title('Products ESS - Update Minutes')
ax0.set(xlabel='')
ax0.set(ylabel='')
ax0.plot()

ax1 = sns.boxplot(y='Product', x='Update Minutes', data=prd_data_premium, orient='h', \
                  order=['Product 1', 'Product 2', 'Product 3', 'Product 4'], \
                  boxprops=dict(alpha=0.3), color='#E63322')

ax1.set_xlim(0)
ax1.set_title('Products PRM - Update Minutes')
ax1.set(xlabel='')
ax1.set(ylabel='')
ax1.plot()
plt.show

但我最终得到的视觉结果是 ax0 是空白的,并且 ax0 和 ax1 的数据都打印在 ax1 上,使得第二个视觉出现乱码,如下所示:

底部图表上打印的最高值

你能帮我看看可能导致问题的原因吗?

谢谢你。

标签: pythonpython-3.xmatplotlibseaborn

解决方案


而不是ax0 = sns.boxplot(...)你需要sns.boxplot(...., ax=ax0)和类似的第二个情节:sns.boxplot(...., ax=ax1).

默认情况下,seaborn 使用“当前斧头”进行绘图。ax您可以通过提供ax=参数来绘制另一个。Seaborn 还返回ax它使用的,然后可用于更改绘图(刻度设置,标签,...)。请注意,当没有明确ax给出时,连续的多个 seaborn 函数将使用相同的ax.

另请注意,某些 seaborn 函数可以创建完整的子图网格,并返回一个FacetGrid对象而不是ax.


推荐阅读