Как программно выбрать конкретный участок в Matplotlib? - PullRequest
17 голосов
/ 18 августа 2011

Таким образом, в 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 Ответ

16 голосов
/ 18 августа 2011

Из документации 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. Уникальный ключ, который был первоначально создан с использованием аргументов и ключевых слов для первого вызова add_subplot, не обновляется. Поэтому, если вы хотите вернуть ось с помощью вызова add_subplot, вам нужно вызвать add_subplot с исходными аргументами и ключевыми словами. Для получения дополнительной информации, следуйте этому отчету о проблеме: https://github.com/matplotlib/matplotlib/issues/429

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

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