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

时间:2019-07-23 20:13:54

标签: python matplotlib

我正在尝试创建一个包含两个图形的子图。每个图都显示了一些相对于时间轴绘制的数据。对于每个图形,我希望有两个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轴的另一种方式是什么?

1 个答案:

答案 0 :(得分:1)

根据ImportanceOfBeingErnest's的建议,您需要满足以下条件:

  • 在使用twinx()的同时,使用索引0和1为每个子图创建双轴。
  • 使用相应的双轴对象绘制数据并设置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在评论中的建议,您可以预定义所有双轴,然后将index用作

ax2 = [ax.twinx() for ax in axs]

ax2[0].plot(...)
ax2[1].plot(...)
相关问题