我尝试用相似的表示法绘制不同的数据,但在几个数字上绘制出略有不同的行为和不同的起源。因此,每个图形之间 Y Axis 的最小值和最大值不同,但比例也不同。

例如以下是我的批量绘图的一些摘录:

python - 不同图形上 Y  Axis 的相同比例-LMLPHP
python - 不同图形上 Y  Axis 的相同比例-LMLPHP

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()

python - 不同图形上 Y  Axis 的相同比例-LMLPHP

编辑:

似乎您想要的行为与我解释您的问题的方式不同。这是一个函数,它将更改 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 的相同比例-LMLPHP

关于python - 不同图形上 Y Axis 的相同比例,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/32336054/

10-14 16:10
查看更多