Python Matplotlib-图形彼此堆叠

Python Matplotlib-图形彼此堆叠,python,python-3.x,matplotlib,seaborn,Python,Python 3.x,Matplotlib,Seaborn,我尝试使用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=';', decim

我尝试使用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上,使得第二个视觉效果混乱,如下所示:

你能帮我找出问题的原因吗


谢谢。

而不是
ax0=sns.boxplot(…)
您需要
sns.boxplot(..,ax=ax0)
和类似的第二个绘图:
sns.boxplot(..,ax=ax1)

默认情况下,seaborn对绘图使用。通过提供
ax=
参数,可以在另一个
ax
上绘图。Seaborn还返回它使用的
ax
,然后可用于更改绘图(勾选设置、标签等)。请注意,当未给出显式的
ax
时,多个seaborn函数将连续使用相同的
ax


还请注意,一些seaborn函数可以创建一个,并返回一个
FaceGrid
对象,而不是
ax

嗨,Johan,解决了这个问题!非常感谢你的帮助!你能把你的答复作为答复吗?看起来你是把它作为评论加上去的,我无法对它投赞成票。