You need to enable JavaScript to run this app. 如何修改matplotlib折线图xtick标签以适配19:00-次日7:00时间区间
优惠活动
大模型
产品
解决方案
定价
更多

如何修改matplotlib折线图xtick标签以适配19:00-次日7:00时间区间

问题原因

你当前遇到的刻度挤在两端、中间留空的问题,核心原因是matplotlib默认将小时值作为连续数值坐标轴处理:7-18这12个小时的数值区间在坐标轴上是真实存在的,你只是通过plt.xticks()隐藏了这部分的刻度显示,并没有删除对应的坐标轴区间,因此会出现6和19之间的大片空白。

解决方案

方案1:使用分类坐标轴(推荐,最适配你的需求)

直接将需要展示的12个时段作为分类值均匀排列在x轴上,完全去掉7-18的空白区间,适合仅对比夜间时段流量的场景:

plt.subplot(2,1,1)
# 定义你需要展示的夜间时段顺序
night_hours = [0,1,2,3,4,5,6,19,20,21,22,23]
# 提取对应时段的流量数据,保证顺序和上面的时段一一对应
traffic_data = by_hour_business_night['traffic_volume'].reindex(night_hours).values

# 用0-11作为x轴的位置坐标,保证每个时段均匀分布
plt.plot(range(len(traffic_data)), traffic_data)
# 替换x轴标签为对应的时段值
plt.xticks(range(len(traffic_data)), night_hours)

plt.title('Business Nights Traffic Volume by Hours')
plt.ylabel('Traffic Volume')
plt.ylim(0,6500)
plt.show()

方案2:保留连续数值轴,添加x轴断轴

如果你需要和日间的24小时连续坐标轴做对齐对比,可以用断轴功能将7-18的区间折叠隐藏:

fig, (ax1, ax2) = plt.subplots(1, 2, sharey=True, figsize=(10,4))
fig.subplots_adjust(wspace=0.05)

night_hours = [0,1,2,3,4,5,6,19,20,21,22,23]
traffic_data = by_hour_business_night['traffic_volume'].reindex(night_hours).values

# 左侧坐标轴展示0-6时段
ax1.plot(night_hours[:7], traffic_data[:7])
ax1.set_xlim(-0.5, 6.5)
# 右侧坐标轴展示19-23时段
ax2.plot(night_hours[7:], traffic_data[7:])
ax2.set_xlim(18.5, 23.5)

# 隐藏中间的边框,添加断轴标记
ax1.spines.right.set_visible(False)
ax2.spines.left.set_visible(False)
ax1.tick_params(labelright=False)
ax2.tick_params(labelleft=False)

d = 0.015
kwargs = dict(transform=ax1.transAxes, color='k', clip_on=False)
ax1.plot((1-d,1+d), (-d,+d), **kwargs)
ax1.plot((1-d,1+d),(1-d,1+d), **kwargs)
kwargs.update(transform=ax2.transAxes)
ax2.plot((-d,+d), (1-d,1+d), **kwargs)
ax2.plot((-d,+d), (-d,+d), **kwargs)

plt.suptitle('Business Nights Traffic Volume by Hours')
ax1.set_ylabel('Traffic Volume')
plt.ylim(0,6500)
plt.show()

内容的提问来源于stack exchange,提问作者Jimmy Lyu

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.16 01:54:03