Ничего себе, здесь есть три вопроса.
Где находится документация 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()
