Что такое SubplotZero?(отсутствует документация) - PullRequest
0 голосов
/ 11 июня 2018

Мой вопрос

Я хотел бы знать, что делает функция SubplotZero() в matplotlib, зная, что на нее нет ссылок в документации по matplotlib, но она используется по крайней мере в трех примерах на сайте matplotlib ( здесь например).Кроме того, поскольку его нет в документации, рекомендуется и безопасно ли его использовать?Или есть риск, что он может быть удален в будущих версиях matplotlib?


Контекст

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

ax.axis["xzero"].set_visible(True)

Однако запись

ax = plt.gca()
ax.axis["xzero"].set_visible(True)

дает ошибку

ax.axis["xzero"].set_visible(True)
TypeError: 'method' object is not subscriptable

Вместо этого, как было показано в примерах, предполагается написать (Примечание: на самом деле есть другой способ достижения того же результата: см. Ответ @ ImportanceOfBeingErnest)

from mpl_toolkits.axisartist.axislines import SubplotZero
fig = plt.figure()
ax = SubplotZero(fig, 1, 1, 1)
fig.add_subplot(ax)
ax.axis["xzero"].set_visible(True)

, который действительно работает.Однако мне было любопытно понять, что делает функция SubplotZero() и почему она вообще существует (в конце концов, зачем она вообще нужна?).Поэтому я пошел посмотреть документацию и понял, что это не является ее частью!

Кто-нибудь знает ответы на эти вопросы?

1 Ответ

0 голосов
/ 11 июня 2018

Ничего себе, здесь есть три вопроса.

Где находится документация SubplotZero()?

В настоящее время она не документирована, так как это AxesZero, которая дополняется в подзаговорестатус через

SubplotZero = matplotlib.axes.subplot_class_factory(AxesZero)

AxesZero также не документирован, но, по крайней мере, появляется в документации.В целом, полный mpl_toolkits.axisartist очень плохо документирован и полностью отсутствует в текущей документации.Но можно сослаться либо на более старую версию , либо на текущие devdocs .

Его не следует удалять в будущих версиях.

Что такоепричина TypeError?

Ошибка TypeError: 'method' object is not subscriptable говорит о том, что метод не может быть проиндексирован.

Это происходит здесь как axis из SubplotZero, который являетсяmpl_toolkits.axisartist.axislines.AxesZero, полностью отличается от "обычного" matplotlib.axes.Axes.Первый предоставляет свои отдельные оси как часть словаря, к которому можно получить доступ как ax.axis["xzero"].Последний является методом, который необходимо вызывать и который вносит некоторые изменения в оси, например, ax.axis("off") отключает оси.К сожалению, они оба имеют атрибут axis, в конце концов ссылаясь на совершенно разные вещи.

Как создать ось в нулевом положении?

В то время как модуль mpl_toolkits.axisartist предоставляет эту функциональность, как показано в цитируемом примере , использование этого модуляпо общему признанию (из-за отсутствующей / неполной документации) довольно громоздко.

Альтернативой является использование обычного matplotlib.axes.Axes.Чтобы позиционировать позвоночник в нулевом положении, можно обратиться к демонстрации Размещение позвоночника .

Чтобы воссоздать связанный пример с осью xaxis в нулевом положении y, можно, например, сделать

ax.spines['bottom'].set_position(('data', 0))

с использованием обычного matplotlib.axes.Axes экземпляра ax.

Полный пример:

import numpy as np
import matplotlib.pyplot as plt

fig, ax = plt.subplots()
ax.set_title('x axis spine at zero data coordinate')
x = np.arange(0, 2*np.pi, 0.01)
ax.plot(x, np.sin(x))
ax.set_xlabel("Axes zero")

ax.spines['bottom'].set_position(('data', 0))
ax.spines['top'].set_visible(False)
ax.spines['right'].set_visible(False)

plt.show()

enter image description here

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