You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在Python plot()中减少X轴索引标签数量,避免过于拥挤?

解决pandas plot日期X轴标签过密的问题

针对你用pandas pivot_table生成数据后绘制温度时序图时X轴日期标签过于密集的问题,这里提供几种实用的调整方法:

方法1:控制X轴刻度最大数量

利用matplotlib的MaxNLocator指定X轴最多显示的标签数量,让自动调整更合理:

import pandas as pd
import matplotlib.pyplot as plt
from matplotlib.ticker import MaxNLocator

All_sensor_data = pd.read_csv("C:/Users/USER1/Desktop/Lab/TMP sensor/tot_data_TMP/All_sensor_data.csv")
All_sensor_data = All_sensor_data.rename(columns={"Date_n_Time": "datetime"})
# 必须将datetime列转为datetime类型,否则无法识别为日期格式
All_sensor_data['datetime'] = pd.to_datetime(All_sensor_data['datetime'])

TMP = All_sensor_data.pivot_table(index="datetime", columns="treatment", values="Temperature (*C)", aggfunc='mean', fill_value=0)

# 绘制图表并获取坐标轴对象
ax = TMP["2022-08-07":"2023-01-10"].plot(xlabel="Date", ylabel="Temperature (°C)", title="Temperature vs Date")
# 设置X轴最多显示8个标签
ax.xaxis.set_major_locator(MaxNLocator(8))
# 旋转标签避免重叠
plt.xticks(rotation=45)
# 自动调整布局防止标签被截断
plt.tight_layout() 
plt.show()

方法2:按日期间隔设置刻度(适配时序数据)

直接指定按月份/周等固定间隔显示日期标签,比如每月显示一个:

import pandas as pd
import matplotlib.pyplot as plt
from matplotlib.dates import MonthLocator, DateFormatter

All_sensor_data = pd.read_csv("C:/Users/USER1/Desktop/Lab/TMP sensor/tot_data_TMP/All_sensor_data.csv")
All_sensor_data['datetime'] = pd.to_datetime(All_sensor_data.rename(columns={"Date_n_Time": "datetime"})['datetime'])

TMP = All_sensor_data.pivot_table(index="datetime", columns="treatment", values="Temperature (*C)", aggfunc='mean', fill_value=0)

ax = TMP["2022-08-07":"2023-01-10"].plot(xlabel="Date", ylabel="Temperature (°C)", title="Temperature vs Date")
# 设置每月显示一个主刻度
ax.xaxis.set_major_locator(MonthLocator())
# 自定义日期显示格式
ax.xaxis.set_major_formatter(DateFormatter('%Y-%m'))
plt.xticks(rotation=45)
plt.tight_layout()
plt.show()

如果需要按周显示,可导入MO(周一)并替换定位器:

from matplotlib.dates import MO, WeekdayLocator
ax.xaxis.set_major_locator(WeekdayLocator(byweekday=MO))

方法3:手动指定要显示的日期标签

直接生成固定间隔的日期列表作为X轴刻度:

import pandas as pd
import matplotlib.pyplot as plt

All_sensor_data = pd.read_csv("C:/Users/USER1/Desktop/Lab/TMP sensor/tot_data_TMP/All_sensor_data.csv")
All_sensor_data['datetime'] = pd.to_datetime(All_sensor_data.rename(columns={"Date_n_Time": "datetime"})['datetime'])

TMP = All_sensor_data.pivot_table(index="datetime", columns="treatment", values="Temperature (*C)", aggfunc='mean', fill_value=0)
subset = TMP["2022-08-07":"2023-01-10"]

# 生成间隔为10天的日期标签
xticks = pd.date_range(start=subset.index.min(), end=subset.index.max(), freq='10D')
ax = subset.plot(xlabel="Date", ylabel="Temperature (°C)", title="Temperature vs Date", xticks=xticks)
plt.xticks(rotation=45)
plt.tight_layout()
plt.show()

关键注意点

  • 必须将datetime列转为datetime类型,否则pandas和matplotlib无法识别日期格式,刻度调整会失效。
  • tight_layout()可自动调整图表布局,避免标签被边缘截断。
  • 旋转标签(如rotation=45)配合刻度数量调整,能进一步提升可读性。

内容的提问来源于stack exchange,提问作者Jonathan Fireman

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.28 00:02:35