Построение двух графиков Seaborn на одном рисунке

Я пытаюсь построить следующие данные в виде горизонтальной гистограммы с накоплением. Я хотел бы показать Неделю 1 и Неделю 2 как столбцы с максимальным размером столбца («Всего») вверху, а затем вниз. Фактические данные - 100 строк, поэтому я пришел к использованию графиков Seaborn с kind = 'bar'. Я не уверен, можно ли складывать (например, Matplotlib), поэтому я решил создать две диаграммы и наложить «Неделя 1» поверх «Всего» для того же эффекта сложения.

Однако, когда я запускаю приведенное ниже, я получаю два отдельных графика, а заголовок и ось диаграммы - это один график. Могу ли я объединить это в одну горизонтальную диаграмму с накоплением. Если более простой способ, ценю, чтобы узнать.

Company Week 1 Week 2 Total
Stanley Atherton 0 1 1
Dennis Auton 1 1 2
David Bailey 3 8 11
Alan Ball 5 2 7
Philip Barker 3 0 3
Mark Beirne 0 1 1
Phyllis Blitz 3 0 3
Simon Blower 4 2 6
Steven Branton 5 7 12
Rebecca Brown 0 4 4

(Имена созданы из генератора случайных имен)

Код:

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

data = pd.read_csv('Sample1.csv', delimiter="\t", error_bad_lines=False)

data_rank = data.sort_values(["Attending", "Company"], ascending=[False,True])

sns.set(style="ticks")

g = sns.catplot(y='Company', x='Total', data=data_rank, kind='bar', height=4, color='red', aspect=0.8, ax=ax)

ax2 =ax.twinx()
g = sns.catplot(y='Company', x='Week 1', data=data_rank, kind='bar', height=4, color='blue', aspect=0.8, ax=ax2)

for ax in g.axes[0]:
    ax.xaxis.tick_top()
    ax.xaxis.set_label_position('top')
    ax.spines['bottom'].set_visible(True)
    ax.spines['top'].set_visible(True)

plt.title("Company by week ", size=7)

catplot 1

catplot 2


person TMStack    schedule 21.01.2021    source источник


Ответы (1)


Думаю, что-то вроде этого работает.

g = sns.barplot(y='Company', x='Total', data=data_rank, color='red', label='Total')
g = sns.barplot(y='Company', x='Week1', data=data_rank, color='blue', label='Week 1')
plt.title("Company by week ", size=12)
plt.xlabel('Frequency')
plt.legend()
plt.show()

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

person Mohil Patel    schedule 21.01.2021
comment
Браво, что хорошо работает, спасибо! - person TMStack; 21.01.2021