我正在尝试创建一个由两个数字组成的子图。每个数字都显示了绘制的一些数据与时间轴的关系。对于每个图形,我希望有两个 y 轴对应于同一图形中显示的两个不同图形。
让我们从对应于其中一个 y 轴的数据开始。这两个图中的每一个的数据都是相同的,生成如下(这是相当丑陋的代码,如果您对如何改进它有任何建议,请告诉我!
pwm_len = len(Time)/6
pwm_max = 255
pwm_min = 150
pwm_mid = 200
pwm_zero = 0
pwm1 = np.repeat(pwm_max, pwm_len)
pwm2 = np.repeat(pwm_min, pwm_len)
pwm3 = np.repeat(pwm_max, pwm_len)
pwm4 = np.repeat(pwm_mid, pwm_len)
pwm5 = np.repeat(pwm_max, pwm_len)
pwm6 = np.repeat(pwm_zero, pwm_len)
pwm = pwm1 + pwm2 + pwm3 + pwm4 + pwm5 + pwm6
为了创建图形,我使用以下代码(请注意,由于twinx()
的一些错误用法,它现在不起作用(:
fig, axs = plt.subplots(2, sharex=True, sharey=True)
plt.subplots_adjust(hspace=0.5)
axs_pwm = axs.twinx()
axs[0].plot(Time, velocity, 'b-')
axs_pwm[0].plot(Time, pwm, 'r-')
axs[0].set_ylabel('[mm/s]')
axs_pwm[0].set_ylabel('PWM')
axs[0].grid(True)
axs[1].plot(Time, velocity_filtered, 'b-')
axs_pwm[1].plot(Time, pwm, 'r-')
axs[1].set_ylabel('[mm/s]')
axs_pwm[1]-set_ylabel('PWM')
axs[1].grid(True)
plt.show()
显然我以错误的方式使用了twinx()
函数。但是绘制第二个 y 轴的不同方法是什么?
根据ImportantOfBeingErnest的建议,你需要以下内容:
- 使用索引 0 和 1 为每个子图创建双轴,同时使用
twinx()
- 使用相应的双轴对象绘制数据并设置 y 轴标签
fig, axs = plt.subplots(2, sharex=True, sharey=True)
plt.subplots_adjust(hspace=0.5)
axs_pwm1 = axs[0].twinx() # Create twin axis for the first subplot
axs[0].plot(Time, velocity, 'b-')
axs_pwm1.plot(Time, pwm, 'r-')
axs[0].set_ylabel('[mm/s]')
axs_pwm1.set_ylabel('PWM')
axs[0].grid(True)
axs_pwm2 = axs[1].twinx() # Create twin axis for the second subplot
axs[1].plot(Time, velocity_filtered, 'b-')
axs_pwm2.plot(Time, pwm, 'r-')
axs[1].set_ylabel('[mm/s]')
axs_pwm2.set_ylabel('PWM')
axs[1].grid(True)
plt.show()
或者按照@SpghttCd在注释中的建议,您可以预定义所有孪生轴,然后将索引用作
ax2 = [ax.twinx() for ax in axs]
ax2[0].plot(...)
ax2[1].plot(...)