Как я могу показать эти графики рядом в Python? - PullRequest
0 голосов
/ 08 апреля 2020

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

teamlist = ['ATL', 'BAL', 'BOS', 'LAA', 'CHA', 'CHN', 'CIN', 'CLE', 'DET',
       'HOU', 'KCR', 'LAD', 'MIN', 'MIL', 'MON', 'NYY', 'NYM', 'OAK',
       'PHI', 'PIT', 'SDP', 'SEA', 'SFG', 'STL', 'TEX', 'TOR', 'COL',
       'MIA', 'ARI', 'TBA', 'WAS']

for i in teamlist:
    data = teamdf[teamdf['teamID'] == i]
    fig, ax1 = plt.subplots(figsize=(5,3))
    ax1 = data.groupby('yearID').attendance.sum().plot(kind='line',label=i)
    ax1.set_yticks([0, 1000000, 2000000, 3000000, 4000000])
    ax1.set_yticklabels(labels=['0', '1M', '2M', '3M', '4M'], fontsize=10, color='#414141')
    ax1.set_xticks([1990, 1995, 2000, 2005, 2010, 2015, 2019])
    ax1.set_xticklabels(labels=['1990', '1995', '2000', '2005', '2010','2015','2019'], fontsize=10, color='#414141')
    mean = teamdf.groupby('yearID').attendance.mean().plot(kind='line',color='gray',label='League Avg.')
    ax1.set(title=i + ' Attendance 1990-2019', ylabel='Tickets Sold', xlabel='Year')
    ax1.legend(loc='best')

Я попытался изменить количество строк и столбцов в строке plt.subplots в l oop, но он создал несколько столбцов для каждого отдельного графика, и это не то, что я хочу. Я думаю, что мне нужно что-то сделать до l oop, чтобы получить 3 столбца графиков, но я не уверен.

Ответы [ 2 ]

0 голосов
/ 08 апреля 2020

Вам нужно определить фигуру за пределами l oop, прежде чем создавать отдельные графики внутри l oop. Вот пример, который, как мы надеемся, сохранит код, который вы уже написали, используя некоторые из тех же имен переменных.

fig = plt.figure()

for id, i in enumerate(teamlist):
  # define grid 11 rows x 3 cols and create subplot in order beginning at top left
  ax1 = fig.add_subplot(11, 3, id)
  ... < the rest of your code > ...

l oop создаст субплоты, начиная с верхнего левого угла сетки и заканчивая внизу справа.

0 голосов
/ 08 апреля 2020

Вам нужно определить plt.subplots() перед тем, как начать итерацию по вашему teamlist.

Затем, когда вы вызываете ваш .plot(), вам нужно указать, что вы хотите нанести на ось, которую вы уже создали, указав .plot(ax=selected_ax).

Примерно так:

fig, axs = plt.subplots(3,11, figsize=(20,20))

for i, team in enumerate(teamlist):
    row_number = i % 3
    column_number = i // 3
    selected_ax = axs[row_number, column_number]
    data = teamdf[teamdf['teamID'] == team]
    data.plot(kind='line',label=team, ax=selected_ax)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...