我正在尝试创建一个由两个数字组成的子图。每一幅图都显示了与时间轴相对应的一些数据。对于每个图形,我希望有两个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轴的另一种方法是什么?
发布于 2019-07-23 21:20:06
根据ImportanceOfBeingErnest's的建议,您需要以下内容:
twinx()时,使用索引0和1为每个子图创建双轴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(...)https://stackoverflow.com/questions/57171550
复制相似问题