Python:在pyplot图上绘制第二个y轴



我正在尝试创建一个由两个数字组成的子图。每个数字都显示了绘制的一些数据与时间轴的关系。对于每个图形,我希望有两个 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(...)

最新更新