вы могли бы использовать MultipleLocator
из ticker
модуля по обеим осям, чтобы определить клещ расстояния:
import matplotlib.pyplot as plt
import matplotlib.ticker as ticker
fig=plt.figure()
ax1=fig.add_subplot(211)
ax2=fig.add_subplot(212)
ax1.set_ylim(0,100)
ax2.set_ylim(40,70)
# set ticks every 10
tickspacing = 10
ax1.yaxis.set_major_locator(ticker.MultipleLocator(base=tickspacing))
ax2.yaxis.set_major_locator(ticker.MultipleLocator(base=tickspacing))
plt.show()
EDIT:
Кажется, что ваше желаемое поведение отличалось от того, как я интерпретировал ваш вопрос. Вот функция, которая изменит пределы осей y, чтобы убедиться, что ymax-ymin
является одинаковым для обеих подзаговоров, используя больший из двух диапазонов ylim
для изменения меньшего.
import matplotlib.pyplot as plt
import numpy as np
fig=plt.figure()
ax1=fig.add_subplot(211)
ax2=fig.add_subplot(212)
ax1.set_ylim(40,50)
ax2.set_ylim(40,70)
def adjust_axes_limits(ax1,ax2):
yrange1 = np.ptp(ax1.get_ylim())
yrange2 = np.ptp(ax2.get_ylim())
def change_limits(ax,yr):
new_ymin = ax.get_ylim()[0] - yr/2.
new_ymax = ax.get_ylim()[1] + yr/2.
ax.set_ylim(new_ymin,new_ymax)
if yrange1 > yrange2:
change_limits(ax2,yrange1-yrange2)
elif yrange2 > yrange1:
change_limits(ax1,yrange2-yrange1)
else:
pass
adjust_axes_limits(ax1,ax2)
plt.show()
Обратите внимание, что первый сюжетные здесь расширилась от (40, 50)
до (30, 60)
, чтобы соответствовать у диапазона второй сюжетные
быть более конкретными. Покажите нам некоторые данные, что вы пробовали, что они производят и как вы хотите, чтобы они были разными. –
Вы имеете в виду ту же разницу в координатах данных, где расположены тики, как показано в ответе @ tom, или в той же разности координат оси (что означает, что 'ymax - ymin' одинаково для всех графиков одного размера)? – askewchan
@askewchan - второй вариант: Ymax - Ymin одинаковый для каждого сюжета. На данный момент единственным способом, который я нашел, является: 1) вычислить Ymax - Ymin для каждого набора данных и найти самый большой диапазон 2) рассчитать среднее значение для каждого набора данных 3) в конечном счете, установив Ymin и Ymax с Ymean ± Yrange/2 .. . И со вторым набором данных это будет хуже ... Я ищу функцию, которая легко установила значение Yrange (предположительно грубо и вручную до этого) – Covich