7

考虑以下用于绘制 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 会重新缩放。有没有办法做到这一点?我想以编程方式进行。

4

2 回答 2

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')
于 2013-03-28T23:46:44.223 回答
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)

在我set_navigate(False)根据 ali_m 的回答添加之前,下图的两个垂直轴都受到在下图中垂直拖动鼠标的影响,而状态轴不受影响,仅在第一个鼠标手势之后。第一次拖动鼠标,所有轴都会受到影响。这似乎是 matplotlib 中的一个错误,刚刚报告为 #12613。

于 2018-10-24T11:24:45.627 回答