我尝试用相似的表示法绘制不同的数据,但在几个数字上绘制出略有不同的行为和不同的起源。因此,每个图形之间 Y Axis 的最小值和最大值不同,但比例也不同。
例如以下是我的批量绘图的一些摘录:
matplotlib 是否存在一种简单的方法来约束这些不同图形上的相同 Y 步长,以便进行简单的视觉解释,同时保持自动确定的 Y min 和 Y max ?
换句话说,我希望每个 Y-tick 之间的公制间距相同
最佳答案
您可以在两个轴上使用 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 Axis 的限制,以确保两个子图的
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)
,以匹配第二个子图的 y 范围关于python - 不同图形上 Y Axis 的相同比例,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/32336054/