GOOGLE ADS

среда, 13 апреля 2022 г.

Легенда в Matplotlib - Подзаговор с помощью цикла For

Я новичок в Python и Matplotlib, я был бы признателен за любую помощь в том, как создавать легенды для каждого подзаголовка, который я создал с помощью цикла FOR. Вот код и лучшее, что я мог приблизиться к маркировке своих фигур.

import matplotlib.pyplot as plt
import numpy as np
n_rows=2
n_cols=2
leg=['A','B','C','D']
fig, axes = plt.subplots(n_rows,n_cols)
for row_num in range(n_rows):
for col_num in range (n_cols):
ax = axes[row_num][col_num]
ax.plot(np.random.rand(20))
ax.set_title(f'Plot ({row_num+1}, {col_num+1})')
ax.legend(leg[row_num+col_num])
fig.suptitle('Main Title')
fig.tight_layout()
plt.show()

вот вывод кода:
Изображение с неправильными легендами


Решение проблемы

Вы используете, ax.legend(leg[row_num+col_num])но row_num+col_numэто неправильное представление для индекса списка.

Вот что происходит

row_num | col_num | idx=row_num+col_num | leg[idx]
0 | 0 | 0 | A
0 | 1 | 1 | B
1 | 0 | 1 | B
1 | 1 | 2 | C

Если вы используете leg[row_num+col_num], вы получите неправильную запись легенды.

Есть много способов это исправить. Самый простой — ввести счетчик (переменная jв приведенном ниже коде), который увеличивается в каждом цикле.

import matplotlib.pyplot as plt
import numpy as np
n_rows=2
n_cols=2
leg=['A','B','C','D']
fig, axes = plt.subplots(n_rows,n_cols)
j = 0
for row_num in range(n_rows):
for col_num in range(n_cols):
ax = axes[row_num][col_num]
ax.plot(np.random.rand(20))
ax.set_title(f'Plot ({row_num+1}, {col_num+1})')
ax.legend(leg[j])
j += 1
fig.suptitle('Main Title')
fig.tight_layout()
plt.show()

Комментариев нет:

Отправить комментарий

Laravel Datatable addColumn returns ID of one record only

Я пытаюсь использовать Yajra Datatable для интеграции DataTable на свой веб-сайт. Я смог отобразить таблицу, но столкнулся с проблемой. В по...