Сюжет из двух столбцов с использованием matplotlib и seaborn - PullRequest
0 голосов
/ 26 апреля 2020

У меня есть требование добавить подсюжеты с двумя столбцами и несколькими строками. Строки не будут фиксированными, но для одного столбца я хочу создать график морских линий из одного набора данных, а для второго столбца я хочу создать график морских линий для другого набора данных.

Я пробовал следующее, но не работает.

tips = sns.load_dataset("tips")
dataset2=tips


days = list(tips.drop_duplicates('day')['day'])
ggpec = gridspec.GridSpec(len(days ), 2)
axs = []
for i,j in zip(days,range(1,len(days)+1)):
    fig = plt.figure(figsize=(20,4),dpi=200)
    palette = sns.color_palette("magma", 2)
    chart = sns.lineplot(x="time", y="total_bill",
                      hue="sex",style='sex',
                      palette=palette, data=tips[tips['day']==i])
    chart.set_xticklabels(
        chart.get_xticklabels(), 
        rotation=90, 
        minor=True,
        verticalalignment=True,
        horizontalalignment='right',
        fontweight='light',
        fontsize='large'
    )

    plt.title("Title 1",fontsize=18, fontweight='bold')

    fig2 = plt.figure(figsize=(20,5),dpi=200)
    palette = sns.color_palette("magma", 2)
    chart = sns.lineplot(x="time", y="total_bill",
                      hue="sex",style='sex',
                      palette=palette, data=dataset2[dataset2['day']==i])
    chart.set_xticklabels(
        chart.get_xticklabels(), 
        rotation=90, 
        minor=True,
        verticalalignment=True,
        horizontalalignment='right',
        fontweight='light',
        fontsize='large'
    )
    plt.title("Title 2",fontsize=18, fontweight='bold')
plt.show()

1 Ответ

2 голосов
/ 26 апреля 2020

для создания нескольких графиков с двумя столбцами и несколькими строками, вы можете использовать субплот. Где вы определяете количество строк, столбцов и подзаголовка, которые нужно активировать в настоящее время.

import matplotlib.pyplot as plt
plt.subplot(3, 2, 1)   # Define 3 rows, 2 column, Activate subplot 1. 
plt.plot([1, 2, 3, 4, 5, 6, 7], [7, 8, 6, 5, 2, 2, 4], 'b*-', label='Plot 1')

plt.subplot(3, 2, 2)   # 3 rows, 2 column, Activate subplot 2.
# plot some data here
plt.plot([1, 2, 3, 4, 5, 6, 7], [7, 8, 6, 5, 2, 2, 4], 'b*-', label='Plot 2')

plt.subplot(3, 2, 3)   # 3 rows, 2 column, Activate subplot 3.
# plot some data here
plt.plot([1, 2, 3, 4, 5, 6, 7], [7, 8, 6, 5, 2, 2, 4], 'b*-', label='Plot 3')

# to Prevent subplots overlap
plt.tight_layout()  
plt.show()

Вы можете использовать эту концепцию и для рисования морских участков.

f, axes = plt.subplots(3,2) # Divide the plot into 3 rows, 2 columns
# Draw the plot in first row second column
sns.lineplot(xData, yData, data=dataSource, ax=axes[0][1]) 
...