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

Matplotlib/Pandas绘图X轴未显示全部值问题求助

解决Matplotlib折线图X轴日期未完全显示的问题

嘿,我看你遇到了X轴日期没全部显示的问题——这其实是Matplotlib的默认行为在搞鬼:它会自动优化刻度数量,防止标签挤在一起,所以就把部分日期藏起来了。不管换什么数据,只要日期数量多一点,它都会这么做。下面给你搞定这个问题:

问题根源

你的代码用了Pandas的plot方法绘图,Matplotlib默认会根据图表的大小自动筛选X轴刻度,避免标签重叠,这就导致部分日期没显示出来。我们要手动强制显示所有日期,同时调整标签的显示方式,让它们不会挤成一团。

修改后的完整代码

我把你的代码做了几处关键修改,直接用这个版本就行:

import matplotlib.pyplot as plt
import pandas as pd
import tkinter as tk
from matplotlib.backends.backend_tkagg import FigureCanvasTkAgg
from matplotlib.figure import Figure
import sys

if sys.version_info[0] < 3:
    import Tkinter as Tk
else:
    import tkinter as Tk

root = Tk.Tk()
top = Tk.Frame(root)
top.pack()
bottom = Tk.Frame(root)
bottom.pack()

# 调整图表尺寸,给X轴标签留出更多空间
fig = plt.Figure(figsize=(10, 6))  
canvas = FigureCanvasTkAgg(fig, top)
canvas.get_tk_widget().pack()
canvas._tkcanvas.pack()

df = pd.read_csv("../data.csv")
ax = fig.add_subplot(111)
fig.suptitle('App Server CPU%', fontsize=12)

# 修正日期解析格式:你的数据是YYYY-MM-DD,原来的格式串写错了
df['date'] = pd.to_datetime(df['date'], format='%Y-%m-%d')  
df = df.set_index('date')
grouped = df.groupby(['server'])

for key, group in grouped:
    group['utilization'].plot(label=key, ax=ax)

# 关键步骤1:强制X轴显示所有唯一日期
ax.set_xticks(df.index.unique())
# 关键步骤2:旋转标签45度并右对齐,避免重叠
ax.set_xticklabels(
    df.index.unique().strftime('%Y-%m-%d'), 
    rotation=45, 
    ha='right'
)

plt.legend(loc='best')

def on_closing():
    root.destroy()

root.protocol("WM_DELETE_WINDOW", on_closing)
root.lift()
root.attributes('-topmost',True)
root.mainloop()

核心修改点解释

  1. 修正日期解析格式:你的数据里日期是2004-08-19这种横杠分隔的格式,但原来代码用了%Y/%m/%d %H:%M:%S,虽然Pandas可能自动兼容,但明确写对格式更稳妥,避免意外错误。
  2. 设置全部X轴刻度:ax.set_xticks(df.index.unique())告诉Matplotlib,X轴要显示所有的唯一日期,不能自动筛选。
  3. 优化标签显示:把标签旋转45度并右对齐,这样即使日期数量多,也不会互相重叠,保证可读性。
  4. 调整图表尺寸:增大图表宽度,给X轴标签更多显示空间,进一步避免拥挤。

这样修改后,X轴就会完整显示所有日期,同时界面也不会乱糟糟的啦。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.27 07:26:19