Я хочу изменить местоположение осей осей графика matplotlib (например, «влево») на конкретное значение данных. Я знаю, что я могу использовать matplotlib.spines.set_position () для этой цели, и на линейном графике это работает нормально. Однако на логарифмическом (или полулогарифмическом) графике ось по какой-то причине не отображается. Следующий код и скриншот демонстрируют проблему:
демонстрационная позиция позвоночника на бревенчатом участке
# test axis location on log plot
from matplotlib import pyplot as plt
figure = plt.figure()
axes = figure.add_subplot(121)
handle, = axes.plot([0.2, 1], [1, 2], 'ro')
axes.xaxis.set_label_text('X')
axes.yaxis.set_label_text('Y')
axes.set_xscale('log')
axes.set_xlim(0.02, 2)
axes.spines['left'].set_position(('data', 0.1))
axes.spines['left'].set_linewidth(3)
axes.set_title('log')
axes2 = figure.add_subplot(122)
handle2, = axes2.plot([0.2, 1], [1, 2], 'ro')
axes2.xaxis.set_label_text('X')
axes2.yaxis.set_label_text('Y')
axes2.set_xlim(0, 2)
axes2.spines['left'].set_position(('data', 0.5))
axes2.spines['left'].set_linewidth(3)
axes2.set_title('linear')
plt.show()
На левом полулогарифмическом графике «левый» позвоночник больше не отображается вообще, тогда как он отображается в правильном месте на правом линейном графике. В качестве обходного пути я могу преобразовать координаты данных в координаты осей и затем использовать set_position (('axes', xxx )), где xxx относится к преобразованной координате. Однако, чтобы обеспечить динамическое масштабирование и изменение масштаба графика, я бы предпочел установить для позвоночника конкретное значение данных, а не значение оси.
Я использую matplotlib v 3.0.2 и Python 3.6 на платформе Windows. Этот вопрос, кажется, связан (но отличается от):
Положения шипов в матплотлибе
Установка шипов в матплотлибрх