Как получить метки и названия осей на всех участках (python) - PullRequest
0 голосов
/ 23 октября 2018

Что я здесь не так делаю?Пробовал прочитать все предыдущие ответы на ту же проблему, но не смог выяснить, в чем проблема, почему легенда и т. Д. Идут только на последнем сюжете?Вероятно, очень простая вещь, которую мне здесь не хватает ..

#Create subplot
fig, axes = plt.subplots(nrows=2, ncols=2, figsize=(12,8));
axes
#parse into own variables
ax11 = axes[0][0]
ax12 = axes[0][1]
ax21 = axes[1][0]
ax22 = axes[1][1]

# Set plot line width
line_width = 1.5

# Plot data
ax11.plot(winter_temps, label='Winter')
plt.legend()
plt.title('Anomaly in temperature during winters 1953-2016')
plt.xlabel('Months')
plt.ylabel('Temperature anomaly (Celsius)')

ax12.plot(spring_temps, label='Spring')
plt.legend()
plt.title('Anomaly in temperature during springs 1953-2016')
plt.xlabel('Months')
plt.ylabel('Temperature anomaly (Celsius)')

ax21.plot(summer_temps, label='Summer')
plt.legend()
plt.title('Anomaly in temperature during summers 1953-2016')
plt.xlabel('Months')
plt.ylabel('Temperature anomaly (Celsius)')

ax22.plot(fall_temps, label='Fall')
plt.legend()
plt.title('Anomaly in temperature during falls 1953-2016')
plt.xlabel('Months')
plt.ylabel('Temperature anomaly (Celsius)')

# Set y-axis limits
ax11.set_ylim(min_temp, max_temp)
ax12.set_ylim(min_temp, max_temp)
ax21.set_ylim(min_temp, max_temp)
ax22.set_ylim(min_temp, max_temp)

# Turn plot grids on
ax11.grid()
ax12.grid()
ax21.grid()
ax22.grid()

Вывод: Output

Все это также дает мне ошибку:

No handles with labels found to put in legend.

Итак, я хочу, чтобы легенда, заголовки осей и заголовок сюжета были на каждом участке.

1 Ответ

0 голосов
/ 23 октября 2018

Если вы используете дескрипторы на под-сюжет, вы получите желаемый результат легенды в каждой подфигуре - либо измените ваши вызовы на plt.legend() после графика на

ax11.legend()
ax12.legend()

и т. Д.,

или более просто / более широко, просто переберите все маркеры в конце:

for ax in axes.flat:
    ax.legend(loc='best')

РЕДАКТИРОВАТЬ : более полное решение, чтобы показать построение подзаговоров вдве части - вещи, которые отличаются от вещей, которые являются последовательными.

# Plot data
ax11.plot(winter_temps, label='Winter')
ax11.set_title('Anomaly in temperature during winters 1953-2016')

ax12.plot(spring_temps, label='Spring')
ax12.set_title('Anomaly in temperature during springs 1953-2016')

ax21.plot(summer_temps, label='Summer')
ax21.set_title('Anomaly in temperature during summers 1953-2016')

ax22.plot(fall_temps, label='Fall')
ax22.set_title('Anomaly in temperature during falls 1953-2016')

# set up labels, limits, gridlines, legends
for ax in axes.flat:    
    ax.set_xlabel('Months')
    ax.set_ylabel('Temperature anomaly (Celsius)')
    ax.set_ylim(min_temp, max_temp)
    ax.grid('on')
    ax.legend(loc='best')

Я бы также предложил взглянуть на fig.suptitle(), рассмотреть возможность использования краткого заголовка для каждого подзаговора («Зима») или не использовать его вообще.поскольку легенда уже включает это.И, наконец, проверьте sharex/sharey аргументы subplots(...);это позволяет вам избежать установки размеров независимо на всех четырех вспомогательных участках, и они перемещаются вместе, если вы прокручиваете в интерактивном режиме.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...