Как я могу программным образом выбрать конкретный подзаговор в Matplotlib?

Итак, в figure, где добавлены три вертикальных подзаголовка с add_subplot, как я могу выбрать, пусть говорят средние

Сейчас я понимаю это перечисление:

[r[0] for r in sorted([[ax, ax.get_geometry()[2]] for ax in self.figure.get_axes()], key=itemgetter(1))]

где я могу просто выбрать индекс, который я хочу, с соответствующим axes. Есть ли более простой способ сделать это?

Ответы

Ответ 1

Из документация matplotlib:

Если на рисунке уже есть подзаголовок с ключом (args, kwargs), тогда он просто сделает этот подзаговор текущим и вернет его.

Вот пример:

import matplotlib.pyplot as plt

fig = plt.figure()  
for vplot in [1,2,3]:
    ax = fig.add_subplot(3,1,vplot)
    ax.plot(range(10),range(10))

ax_again = fig.add_subplot(3,1,2)
ax_again.annotate("The middle one",xy=(7,5),xytext=(7,5))

plt.show()

Средний сюжет вызывается снова, чтобы его можно было аннотировать.

Что делать, если я устанавливаю фон с помощью моего первоначального вызова, нужно ли его снова установить, когда я получу субплан во второй раз?

Да. Аргументы и ключевые слова для исходного вызова используются для создания уникального идентификатора. Поэтому, чтобы фигура снова сгенерировала этот уникальный идентификатор, вам нужно передать те же аргументы (определение сетки, положение) и ключевые слова снова. Например:

import matplotlib.pyplot as plt

fig = plt.figure()  
ax = fig.add_subplot(2,1,1,axisbg='red')
ax.plot(range(10),range(10))
ax = fig.add_subplot(2,1,2)
ax.plot(range(10),range(10))

ax_again = fig.add_subplot(2,1,1,axisbg='red')
ax_again.annotate("The top one",xy=(7,5),xytext=(7,5))

plt.show()

Что делать, если я использую ax_again.change_geometry() ?

Вы думаете, что change_geometry, например. от 312 до 422, изменит, как вы используете add_subplot, но это не так. По-видимому, при вызове change_geometry возникает ошибка или undefined. Уникальный ключ, который был первоначально сгенерирован с использованием аргументов и ключевых слов, к первому вызову add_subplot, не обновляется. Поэтому, если вы хотите вернуть ось с вызовом add_subplot, вам нужно вызвать add_subplot с исходными аргументами и ключевыми словами. Для получения дополнительной информации следуйте этому отчету: https://github.com/matplotlib/matplotlib/issues/429

Теперь я предполагаю, что если вы измените какое-либо свойство подзаголовка после его создания с помощью вызова add_subplot, уникальный параметр не будет изменен. Поэтому просто используйте оригинальные аргументы и ключевые слова, и, надеюсь, это сработает.