#python #python-3.x #matplotlib #seaborn
#python #python-3.x #matplotlib #seaborn
Вопрос:
Я пытаюсь визуализировать две диаграммы Seaborn boxplots, используя метод fig (ax) следующим образом:
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, что делает второе изображение искаженным, вот так:
Не могли бы вы подсказать мне, что может быть причиной проблемы?
Спасибо.
Комментарии:
1. Привет, Йохан, это решило проблему! Большое спасибо за вашу помощь! Не могли бы вы опубликовать свой ответ в качестве ответа? Похоже, вы добавили это в качестве комментария, и я не могу его повысить.
Ответ №1:
Вместо ax0 = sns.boxplot(...)
вам нужно sns.boxplot(...., ax=ax0)
и аналогично для второго графика: sns.boxplot(...., ax=ax1)
.
По умолчанию seaborn использует «текущую ось» для построения графика. Вы можете использовать другой, ax
указав ax=
параметр. Seaborn также возвращает ax
используемые им данные, которые затем могут быть использованы для изменения графика (настройки галочек, метки, …). Обратите внимание, что, когда не задано явное ax
значение, несколько функций seaborn последовательно будут использовать одно и то же ax
.
Также обратите внимание, что некоторые функции seaborn могут создавать полную сетку подзаголовков и возвращать FacetGrid
объект вместо ax
.