2014-05-31 2 views
0

The answer to this question предлагает, чтобы я играл с set_ylim/get_ylim, чтобы выровнять две оси с двумя осями. Однако, похоже, это не работает для меня.matplotlib: Выравнивание двойных у-осей

Фрагмент кода:

fig, ax1 = plt.subplots() 

yLim = [minY, maxY] 
xLim = [0, 0.01] 

for x in analysisNumbers: 
    ax1.plot(getData(x), vCoords, **getStyle(x)) 

ax1.set_yticks(vCoords) 
ax1.grid(True, which='major') 


ax2 = ax1.twinx() 
ax2.set_yticks(ax1.get_yticks()) 
ax2.set_ylim(ax1.get_ylim()) 
ax2.set_ylim(ax1.get_ylim()) 

plt.xlim(xLim[0], xLim[1]) 
plt.ylim(yLim[0], yLim[1]) 

plt.minorticks_on() 

plt.show() 

выход Graph (открыть изображение в новом окне):

enter image description here

Сдвоенные оси должны быть одинаковыми, но они не являются. Их ярлыки одинаковы, но их выравнивание не является (см., Что нули не выстраиваются в линию). Что не так?

+0

, пожалуйста, покажите остальную часть кода (при необходимости пропустите команды построения графика). вы явно управляете осями больше, чем показано на 5 строках. –

+0

@PaulH Я поместил оставшуюся часть соответствующего кода библиотеки matplot, как и требовалось. – user89

+0

Проблема заключается в строке 'plt.ylim', которая применяется только к текущим осям, поэтому они не выстроены в линию, потому что вы указали библиотеке, что они не выстроились в линию. – tacaswell

ответ

0

Как отмечает tcaswell в комментарии, plt.ylim() влияет только на одну из осей. Если заменить эти строки:

ax2.set_ylim(ax1.get_ylim()) 
ax2.set_ylim(ax1.get_ylim()) 

plt.xlim(xLim[0], xLim[1]) 
plt.ylim(yLim[0], yLim[1]) 

с этим:

ax1.set_ylim(yLim[0], yLim[1]) 
ax2.set_ylim(ax1.get_ylim()) 

plt.xlim(xLim[0], xLim[1]) 

Это будет работать, как я предполагаю, что вы хотели.

Смежные вопросы