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()
核心修改点解释
- 修正日期解析格式:你的数据里日期是
2004-08-19这种横杠分隔的格式,但原来代码用了%Y/%m/%d %H:%M:%S,虽然Pandas可能自动兼容,但明确写对格式更稳妥,避免意外错误。 - 设置全部X轴刻度:
ax.set_xticks(df.index.unique())告诉Matplotlib,X轴要显示所有的唯一日期,不能自动筛选。 - 优化标签显示:把标签旋转45度并右对齐,这样即使日期数量多,也不会互相重叠,保证可读性。
- 调整图表尺寸:增大图表宽度,给X轴标签更多显示空间,进一步避免拥挤。
这样修改后,X轴就会完整显示所有日期,同时界面也不会乱糟糟的啦。
内容的提问来源于stack exchange,提问作者vas
相关产品推荐
相关产品推荐

