【问题标题】:How to resolve line in subplot is not visible如何解决子图中的线不可见
【发布时间】:2021-12-21 21:54:45
【问题描述】:

我试图展示速度与速度与加速度。具体数字并不重要,只是概念。最后一张图没有显示斜率为零的线(例如:y=10)。我希望程序以图形的 x 值与其他值相同(1 到 10)来显示它。除了 x 值,具体数字无关紧要,因为我不会显示 y 值。我只想看到一条 0 斜率线 T-T

t = np.arange(1, 10, 1)
spd_graph = np.exp(t/2)
velo_graph = 3*t
accel_graph = .5
# plot speed
ax1 = plt.subplot(311,ylabel='Speed')
plt.plot(t, spd_graph,'c')
plt.setp(ax1.get_xticklabels(), fontsize=6)
plt.setp(ax1.get_yticklabels(), visible=False)
plt.ylim(0,30)
plt.xlim(0,10)
# plot velocity
ax2 = plt.subplot(312,ylabel='Velocity')
plt.plot(t,velo_graph,'g')
plt.setp(ax2.get_xticklabels(), fontsize=6)
plt.setp(ax2.get_yticklabels(), visible=False)
plt.ylim(0,30)
plt.xlim(0,10)
# plot acceleration
ax3 = plt.subplot(313,label='Acceleration',xlabel='Time',ylabel='Acceleration')
plt.plot(accel_graph,'b')
plt.setp(ax3.get_xticklabels(), fontsize=6)
plt.setp(ax3.get_yticklabels(), visible=False)
plt.ylim(0,30)
plt.xlim(0,10)

plt.show()

【问题讨论】:

  • 希望答案是有帮助的。彻底回答问题很费时间。如果您的问题已解决,请接受解决方案 位于答案左上角的 ▲/▼ 箭头下方。如果出现更好的解决方案,则可以接受新的解决方案。如果您的声望超过 15,您还可以使用 ▲/▼ 箭头对答案的有用性进行投票。 如果解决方案无法回答问题,请发表评论。 What should I do when someone answers my question?。谢谢。

标签: python matplotlib plot subplot


【解决方案1】:

在子图ax3 上,plt.plot(accel_graph, 'b') 正在尝试绘制单个浮点值,但这是行不通的。 您需要:

  1. 确保accel_graph 是一个与t 形状相同的数组(或列表),例如accel_graph = 0.5*np.ones(t.shape),然后是plt.plot(t, accel_graph, 'b'),或类似的东西(例如plt.plot([min(t), max(t)], [0.5, 0.5], 'b')

  2. 画一条水平线;而不是 plt.plot(accel_graph, 'b') 行,执行类似 ax3.axhline(0.5, color='b') 的操作(请注意,这将导致水平线超出您拥有的最小和最大 t 值)

t = np.arange(1, 10, 1)
spd_graph = np.exp(t/2)
velo_graph = 3*t
accel_graph = .5

fig, (ax1, ax2, ax3) = plt.subplots(3, 1, figsize=(6, 6), sharey=False)

# plot speed
ax1.plot(t, spd_graph,'c')
ax1.tick_params(axis='x', labelsize=6)
ax1.axes.yaxis.set_ticklabels([])
ax1.set(ylabel='Speed', ylim=(0, 30), xlim=(0, 10))

# plot velocity
ax2.plot(t, velo_graph,'g')
ax2.tick_params(axis='x', labelsize=6)
ax2.axes.yaxis.set_ticklabels([])
ax2.set(ylabel='Velocity', ylim=(0, 30), xlim=(0, 10))

# plot acceleration
ax3.hlines(accel_graph, t[0], t[-1])
ax3.tick_params(axis='x', labelsize=6)
ax3.axes.yaxis.set_ticklabels([])
ax3.set(xlabel='Time', ylabel='Acceleration', ylim=(0, 1), xlim=(0, 10))

plt.show()

【讨论】:

    猜你喜欢
    • 2019-09-12
    • 2019-07-25
    • 2022-01-23
    • 1970-01-01
    • 1970-01-01
    • 2016-08-08
    相关资源
    最近更新 更多