Большое количество подзаговоров с matplotlib

Я хотел бы создать сюжет со многими (100) подзаголовками с помощью Python matplotlib. Я не могу найти подходящий синтаксис для него:

Я хотел бы что-то вроде (это не работает)

plt.subplot(10,10,i,X1, Y) 

в цикле с i от 0 до 99, тогда

plt.show()

Синтаксис доступен во многих учебниках для случая, когда есть только несколько подзаголовков. Тогда синтаксис может быть

plt.close('all')
fig = plt.figure()

ax1 = plt.subplot(221)
ax2 = plt.subplot(223)
ax3 = plt.subplot(122)

example_plot(ax1)
example_plot(ax2)
example_plot(ax3)

plt.tight_layout()

код взят отсюда.

Для моей проблемы я предполагаю, что я не могу использовать тот же синтаксис, что и plt.subplot(10101) и т. д., который я не понимаю.

У тебя есть решение?

Спасибо


person kiriloff    schedule 13.11.2012    source источник


Ответы (4)


Попробуй это:

fig, ax = plt.subplots(10, 10)

где ax будет содержать сто осей в списке (списков).

Это действительно удобная функция из документации:

Definition: plt.subplots(nrows=1, ncols=1, sharex=False, sharey=False, squeeze=True, subplot_kw=None, **fig_kw)
Create a figure with a set of subplots already made.

This utility wrapper makes it convenient to create common layouts of
subplots, including the enclosing figure object, in a single call.
person jorgeca    schedule 13.11.2012

Вот полностью работающее кодовое решение, которое показывает, как пронумерованы вещи, так как похоже, что люди все еще приходят сюда посмотреть:

columns = 10
rows = 4
fig, ax_array = plt.subplots(rows, columns,squeeze=False)
for i,ax_row in enumerate(ax_array):
    for j,axes in enumerate(ax_row):
        axes.set_title('{},{}'.format(i,j))
        axes.set_yticklabels([])
        axes.set_xticklabels([])
#         axes.plot(you_data_goes_here,'r-')
plt.show()

Что выводит это, чтобы показать вам, как работает нумерация (я сделал только 4 строки вместо 10, чтобы сделать изображение немного меньше, просто измените «строки» на 10, чтобы получить 10 строк подзаголовков):

Массив подграфиков Matplotlib

Нумерация показывает вам, какие значения i и j у вас будут в каждой позиции, поэтому вы можете выстроить вещи так, как хотите, в массиве подграфиков matplotlib. Это включает в себя подграфики в массивах для любого макета, который вы хотите.

person Ezekiel Kruglick    schedule 20.11.2017
comment
Я знаю, что это старо, но если вы установите для строк или столбцов значение 1, код выйдет из строя, потому что нечего повторять. - person Mr. Fegur; 09.04.2018
comment
@Mr.Fegur - достаточно справедливая точка зрения, хотя вся точка показывает большой массив. Надеюсь, люди увидят, как устранить ненужный цикл, если захотят, хотите пример? - person Ezekiel Kruglick; 10.04.2018
comment
Возможно, редактирование вашего ответа с включением опции сжатия='False' в plt.subplots заставит ответ обрабатывать случай столбцов/строки=1. - person Mr. Fegur; 11.04.2018
comment
@Mr.Fegur - Добавлено. У меня никогда не было возможности использовать это, спасибо, что указали мне на это. аккуратный! - person Ezekiel Kruglick; 11.04.2018
comment
См. здесь, чтобы иметь одну цветовую шкалу для всех подзаголовков: ком/вопросы/13784201/ - person user3440489; 28.08.2019

Ваш пример почти правильный. Пожалуйста, используйте:

for i in range(100):
    ax = plt.subplot(10,10,i)
    ax.plot(...)
person btel    schedule 13.11.2012

Если вы пытаетесь сгенерировать ~ 100 подзаголовков, на практике вы можете сделать что-то вроде это, которое будет работать много Быстрее. Вы отказываетесь от меток отдельных осей, но со 100 подграфиками, если вы не делаете огромные распечатки, вы все равно не сможете прочитать метки.

person tacaswell    schedule 13.11.2012