Matplotlib绘制小时数据时无法显示全部X轴刻度标签求助
问题:Matplotlib/Seaborn绘图时显示0-23全部X轴刻度标签
数据序列
hour 0 35845 1 18921 2 14484 3 12504 4 13862 5 14958 6 23328 7 33580 8 66878 9 65291 10 61785 11 64781 12 68799 13 72486 14 83230 15 75487 16 88231 17 85383 18 75525 19 61739 20 51696 21 43215 22 38539 23 30797 dtype: int64
该序列由df_hour = df.groupby("hour").size()生成,其中df是包含Int64类型"hour"列(值范围0-23)的DataFrame。
基础绘图代码
import matplotlib.pyplot as plt # 修正原代码导入错误 import seaborn as sb fig, ax = plt.subplots() plt.title("Collision by hour") sb.lineplot(x=df_hour.index, y=df_hour.values)
遇到的问题
运行上述代码后,图表仅显示5个X轴刻度标签,无法展示0到23的全部小时刻度。
已尝试的方法
- 使用
mdate.AutoDateLocator和ConciseDateFormatter:缺失奇数小时刻度,且出现额外首尾界限 - 使用
mdate.HourLocator和DateFormatter:X轴刻度标签无法正常读取 - 调用
ax.set_xticklabels(df["hour"]):仅显示右侧X轴刻度标签 - 手动传入刻度列表调用
ax.set_xticklabels:仅显示左侧X轴刻度标签
解决方案
直接通过Matplotlib的set_xticks方法指定所有刻度位置即可,无需使用日期相关定位器(此处hour为普通整数,非时间类型):
import matplotlib.pyplot as plt import seaborn as sb fig, ax = plt.subplots() plt.title("Collision by hour") sb.lineplot(x=df_hour.index, y=df_hour.values) # 设置X轴刻度为0到23的所有整数 ax.set_xticks(range(24)) # 可选:旋转标签避免重叠 ax.tick_params(axis='x', rotation=45) plt.show()
说明
df_hour.index本身就是0-23的整数序列,直接用range(24)指定刻度位置即可。之前误用日期定位器是问题核心,因为日期工具仅适用于时间戳类型数据。另外原代码中import matplotlib as plt为错误写法,已修正为标准导入方式。
内容的提问来源于stack exchange,提问作者xiaochuan fang
相关产品推荐
相关产品推荐

