Постройте две диаграммы на одном рисунке с помощью Python

Я пытаюсь построить два графика на одном и том же рисунке. Я попытался использовать функцию subplot (), но безрезультатно. Вот код, который я использую для построения одного графика за раз.

Первый кошачий сюжет

fig, axs =plt.subplots(2,1)
sns.catplot(x = 'day',y = 'count',data=day_of_month_count,
            kind ='bar',
            height = 8 , aspect= 1.5,ax=axs[0])

введите описание изображения здесь

Второй кошачий сюжет

Вот второй сюжет, который я строю:

sns.catplot(x = 'day',y = 'count',data=day_of_month_count,
           kind ='bar',
           height = 8 , aspect= 1.5,ax=axs[1])

введите описание изображения здесь

Цель: построить катплоты на одном рисунке (один рядом с другим)

Я пробовал что-то подобное (с подсюжетом), но это не работает.

fig, axs =plt.subplots(2,1)
sns.catplot(x = 'day',y = 'count',data=day_of_month_count,
            kind ='bar',
            height = 8 , aspect= 1.5,ax=axs[0])
sns.catplot(x = 'month',y = 'count',data=month_of_the_year_count,
           kind ='bar',
           height = 8 , aspect= 1.5,ax=axs[1])

Есть альтернативы? решения?


person mouni93    schedule 08.07.2019    source источник


Ответы (1)


Во-первых, рядом друг с другом потребуется 1 строка 2 столбца. Затем следующий метод работает нормально, как ожидалось.

Здесь вы должны закрыть / скрыть ось, возвращаемую catplot. Это можно сделать с помощью правильного индекса и plt.close. Индексация / нумерация цифр начинается с 0. Вот образец ответа.

import seaborn as sns
import matplotlib.pyplot as plt
sns.set(style="ticks")
exercise = sns.load_dataset("exercise")

fig, axs = plt.subplots(1,2)

sns.catplot(x="time", y="pulse", kind ='bar', data=exercise, ax=axs[0])
sns.catplot(x="time", y="pulse", kind ='bar', data=exercise, ax=axs[1])
plt.close(2)
plt.close(3)

fig.tight_layout()

введите описание изображения здесь

person Sheldore    schedule 08.07.2019
comment
Что-то не так . Я выполняю тот же код, что и ваш. добавьте в конце plt.savefig ('xxxx.png'). На выходе я получаю фигуру с двумя осями (но без графиков). - person mouni93; 08.07.2019
comment
@ mouni93 Можете попробовать просто скопировать мой код в новый терминал и запустить его? - person Sheldore; 08.07.2019
comment
выполнение того же кода через терминал и добавление savefig в конце дает тот же результат, что и ваш. Не знаю, что не так с моим jupyter. Я выполняю сценарий через блокнот jupyter (! Python test.py), и он отлично работает. Спасибо - person mouni93; 08.07.2019
comment
Я проголосовал против этого, потому что это явное неправильное использование функции catplot морского дна. Проблема с такими обходными путями заключается в том, что они будут распространяться и создавать новые проблемы для людей, которые не подозревают о последствиях. Позже, как только будет исправлена ​​ошибка, связанная с тем, что морские функции на уровне рисунка принимают сквозной аргумент для ax, все они снова начнут задавать вопросы, почему их код больше не работает. Вместо этого люди должны принять тот факт, что catplot создает свою собственную фигуру и либо использовать аргумент catplot col, либо создать два barplot по отдельности. - person ImportanceOfBeingErnest; 09.07.2019
comment
@ImportanceOfBeingErnest: Спасибо за обоснование отрицательного голоса. Оценил! - person Sheldore; 09.07.2019