首页 > 解决方案 > 如何解决子图中的线不可见

问题描述

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

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()

标签: pythonmatplotlibplotsubplot

解决方案


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

  1. 确保accel_graph数组(或列表)的形状与t, 例如 , accel_graph = 0.5*np.ones(t.shape)thenplt.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()

在此处输入图像描述


推荐阅读