多个y轴刻度,但仅一个可用于平移和缩放
考虑以下用于绘制matplotlib图形的Python代码:
import matplotlib.pylab as pp
import numpy as np
alpha = np.linspace(0, 2 * np.pi, 400)
sig1 = np.sin(alpha)
sig2 = np.sin(2 * alpha) + 2 * (alpha > np.pi)
ax1 = pp.subplot(111)
ax2 = ax1.twinx()
ax1.plot(alpha, sig1, color='b')
ax2.plot(alpha, sig2, color='r')
ax1.set_ylabel('sig1 value', color='b')
ax2.set_ylabel('sig2 value', color='r')
pp.grid()
pp.show()
这段代码给我生成了一个漂亮的图表。
我想知道如何禁用其中一个坐标轴的平移/缩放功能,这样当我使用平移/缩放工具时,只有ax2会重新缩放。例如,有没有办法做到这一点?我想通过编程的方式来实现。
2 个回答
0
这是一个稍微复杂一点的例子,里面有两个绘图区域和三个竖直的坐标轴。只有下方子图的公共横坐标轴和左侧竖坐标轴是可以互动的。
fig, ax_left = plt.subplots()
ax_right = ax_left.twinx()
ax_status = make_axes_locatable(ax_left).append_axes('top', size=1.2, pad=0., sharex=ax_left)
ax_status.xaxis.set_tick_params(labelbottom=False)
ax_right.set_navigate(False)
ax_status.set_navigate(False)
在我根据ali_m的回答添加了set_navigate(False)
之前,下方图的两个竖坐标轴在你用鼠标上下拖动的时候都会受到影响,而状态轴则没有受到影响,这本来是应该的,但只在第一次拖动鼠标后才会这样。第一次拖动鼠标时,所有的坐标轴都会受到影响。这看起来像是matplotlib中的一个bug,已经被报告为#12613。
7
你可以通过使用 ax2.set_navigate(False)
来实现这个功能:
from matplotlib.pyplot import *
import numpy as np
fig,ax1 = subplots(1,1)
ax2 = ax1.twinx()
ax2.set_navigate(False)
x = np.linspace(0,2*np.pi,100)
ax1.plot(x,np.sin(x),'b')
ax1.set_xlabel('Scaleable axis')
ax1.set_ylabel('Scaleable axis')
ax2.plot(x,np.sin(x+1),'r')
ax2.set_ylabel('Static axis',weight='bold')