2016-08-17 4 views
2

Я пытаюсь создать вторичную ось для оси с равным соотношением сторон, используя twinx(), однако, как видно из приведенного ниже примера, вторичная ось не соответствует соотношению сторон оригинал.Вторичная ось Matplotlib с равным соотношением сторон

Есть ли что-то дополнительное, что нужно сделать, или это ошибка в matplotlib?


Код:

from matplotlib import pyplot as plt 

fig = plt.figure() 
ax1 = fig.add_subplot(111, adjustable='box-forced', aspect='equal') 
ax2 = ax1.twinx() 
plt.show() 

Выходной показатель:

matplotlib output

+0

ли работа с из 'коробки -forced'? – tacaswell

+0

Без «box-принудительно» области графика выглядят одинакового размера, но если я рисую на второй оси и изменяю размер окна, становится ясно, что соотношение сторон меняется – user3419537

+0

. Интересно, что приведенный выше пример кода работает правильно, если я создаю 'ax1 'using' host_subplot' импортируется из 'mpl_toolkits.axes_grid1' вместо' fig.add_subplot'. Однако в моем фактическом коде я использую объектно-ориентированный API, поэтому я не думаю, что могу использовать 'host_subplot' – user3419537

ответ

0

Создание оси хоста с host_subplot как в matplotlib example на паразитических осей вместо fig.add_subplot, как представляется, р решить проблему. Графики теперь занимают одинаковое пространство и имеют равные пропорции.

from matplotlib import pyplot as plt 
from mpl_toolkits.axes_grid1 import host_subplot 

fig = plt.figure() 
ax1 = host_subplot(111, adjustable='box-forced', aspect='equal') 
ax2 = ax1.twinx() 
plt.show() 

я смог достичь того же, что и выше с объектно-ориентированный API, используемого в моей реальной программе, создавая ось хоста с SubplotHost

from PyQt5 import QtWidgets 
from matplotlib.figure import Figure 
from matplotlib.backends.backend_qt5agg import FigureCanvasQTAgg as FigureCanvas 
from mpl_toolkits.axes_grid1.parasite_axes import SubplotHost 

app = QtWidgets.QApplication([]) 

fig = Figure() 
ax1 = SubplotHost(fig, 111, adjustable='box-forced', aspect='equal') 
ax2 = ax1.twinx() 
fig.add_subplot(ax1) 
canvas = FigureCanvas(fig) 
canvas.show() 

app.exec_() 
Смежные вопросы