2014-12-06 3 views
0

Я обнаружил, что не могу получить оси с автомасштабированием, чтобы работать на 1-й оси после создания вторых осей с использованием doublex. Ожидается ли это?Оси оси Matplotlib не работают после doublex()

import numpy as np 
import matplotlib.pyplot as plt 

x = np.arange(0, 10, 0.1) 
y1 = 0.05 * x**2 
y2 = -1 *y1 

fig, axL = plt.subplots() # Make Left Axes 
axR = axL.twinx() # Make Left Axes 
axL.plot(x, y1, 'g-') # Plot on Left 
axL.grid() 
axL.autoscale(enable=True, axis=u'both', tight=False) 
plt.show() 
# Do some stuff then later plot on axR 

Когда я бегу выше код он autoscales в у-направлении правильно на левых осей (от 0 до 5), но изменяет масштаб по оси Х до +/- 0,06 вместо правильного 0 до 10. Однако, как только axR больше не будет пустым и что-то построено на axR, он ведет себя так, как я ожидал.

Это только пример того, как я впервые столкнулся с этой проблемой в более сложном графическом интерфейсе PyQT4, который позволяет пользователю создавать несколько подзаговоров & комбинаций влево/вправо. Поскольку пользователь - это тот, который вручную контролирует порядок создания сюжета, возможно, чтобы приведенная выше ситуация представилась.

Есть ли способ автомасштабирования работать с пустыми двойными правыми осями. Или Xlimit просто должен быть установлен вручную?

FYI, я использую Python 3.4 как часть Anaconda v2.0.1 с Matplotlib v1.3.1

Спасибо.

ответ

1

Это просто обходное решение, чем правильное решение или объяснение.

Просто добавьте невидимую точку в правой оси, так что не совсем пуст:

axR.plot(0, 0, visible=False) 

Вы должны убедиться, однако, что невидимая точка лежит в пределах диапазонов данных, которые вы сюжет в axL , Например .:

axR.plot(np.mean(x),np.mean(y1),visible=False) 

Что касается объяснения (я угадывание):

axR.dataLim является [-np.inf, np.inf] изначально. Объединение axR.dataLim и axL.dataLim все еще дает [-np.inf, np.inf], который затем свертывается до [0,0].


РЕДАКТИРОВАТЬ: Это было исправлено в последнее время (here). Модернизация до matplotlib v1.4. * Должна решить проблему.

+0

Спасибо! Я тестировал это после обновления matplotlib на своей персональной машине, и он работал, как ожидалось. К сожалению, на работе все управляется конфигурацией, поэтому мне нужно будет убедиться, могу ли я убедить их сделать то же самое. –

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