我写了这个函数,它Matplotlib轴对象AX1,AX2,并浮minresax1 minresax2:
def align_y_axis(ax1, ax2, minresax1, minresax2):
""" Sets tick marks of twinx axes to line up with 7 total tick marks
ax1 and ax2 are matplotlib axes
Spacing between tick marks will be a factor of minresax1 and minresax2"""
ax1ylims = ax1.get_ybound()
ax2ylims = ax2.get_ybound()
ax1factor = minresax1 * 6
ax2factor = minresax2 * 6
ax1.set_yticks(np.linspace(ax1ylims[0],
ax1ylims[1]+(ax1factor -
(ax1ylims[1]-ax1ylims[0]) % ax1factor) %
ax1factor,
7))
ax2.set_yticks(np.linspace(ax2ylims[0],
ax2ylims[1]+(ax2factor -
(ax2ylims[1]-ax2ylims[0]) % ax2factor) %
ax2factor,
7))
它计算和设置滴答,以便有七个滴答声。最低滴答对应于当前最低滴答并增加最高滴答,使得每个滴答之间的间隔为minrexax1或minrexax2的整数倍。
为了让一般情况下,你可以设置你想要改变以往7
蜱总数你看到蜱的总数,并改变6
到总数的刻度减1
我把拉请求加入一些到这个matplotlib.ticker.LinearLocator:
https://github.com/matplotlib/matplotlib/issues/6142
未来(?Matplotlib 2.0也许),尝试:
import matplotlib.ticker
nticks = 11
ax1.yaxis.set_major_locator(matplotlib.ticker.LinearLocator(nticks))
ax2.yaxis.set_major_locator(matplotlib.ticker.LinearLocator(nticks))
这应该只是工作,并选择方便的蜱两个Y轴。
你在找'ax2.set_ylim((10,20))'? – farenorth 2014-11-05 13:18:28
我正在寻找一个通用的方法来做到这一点。即如果我得到任何两个数据集,我如何以网格线重合的方式设置图。 – 2014-11-05 13:32:17
你只需要通过设置你的极限和刻度间距手动做到这一点。 – 2014-11-05 19:00:42