我尝试绘制具有相似表示的不同数据,但在几个数字上略有不同的行为和不同的起源。所以最小和最小Y轴的最大值在每个图形之间是不同的,但也是比例。
e.g。以下是我的批量绘图的一些摘录:
matplotlib是否存在一种简单的方法,可以在这些不同的数字上约束相同的Y步,以便在保持自动确定的Y min和Y max的同时进行简单的视觉解释?
换句话说,我希望每个Y-tick之间有相同的度量间距
答案 0 :(得分:2)
您可以使用两个轴上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()
修改强>
似乎您所期望的行为与我解释您的问题的方式不同。这是一个更改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()
答案 1 :(得分:0)
汤姆的答案很好! 但我决定使用更简单的解决方案
我为所有情节定义了一个任意yrange
,例如
yrang = 0.003
对于每个情节,我都这样做:
ymin, ymax = ax.get_ylim()
ymid = np.mean([ymin,ymax])
ax.set_ylim([ymid - yrang/2 , ymid + yrang/2])
可能:
ax.yaxis.set_major_locator(ticker.MultipleLocator(base=0.005))