如何正确绘制Pandas DataFrame折线图?解决X轴标签错位重叠问题
问题诊断与修复方案
我帮你找出了X轴标签错位的核心问题,主要是代码里的几个关键错误导致的:
错误点分析
- 错误1:X轴刻度位置用错了数据
你写了ax.set_xticks(df.Score),这把Score列的值当成了X轴刻度的位置,但你的X轴对应的是Split列的数值,完全不匹配的刻度位置直接导致标签错位。 - 错误2:X轴范围被错误限制
ax.set_xlim((0, 1))把X轴的显示范围锁死在了0到1之间,但你的Split值明显包含远大于1的数值(比如15、50、95等),所以所有数据点都被挤压到X轴最右侧,标签自然重叠在那里。 - 潜在问题:标签数量可能不匹配
你提供的X轴标签有25个,需要确保df的行数也是25,否则会出现刻度与标签对应不上的情况。
修正后的完整代码
# importing pandas package import pandas as pd import matplotlib.pyplot as plt import seaborn as sns # making data frame from csv file dataset = pd.read_csv('curve.csv.csv') df = pd.DataFrame(dataset.sort_values('Split')[['Split', 'Score']]) df.reset_index(drop=True, inplace=True) print(df) ax = df.plot.line(x='Split', y='Score', color='green', marker=".") # 移除错误的X轴范围限制,让matplotlib自动适配数据范围 # ax.set_xlim((0, 1)) # 已删除该行 ax.grid(True) # 设置X轴刻度为Split列的实际数值,确保刻度与数据点对齐 ax.set_xticks(df.Split) # 设置标签并添加旋转避免重叠,同时确保标签数量与df行数一致 ax.set_xticklabels( ['.005','.010','.015','.020','.040','.060','.080','1','15','20','25','30','35','40','45','50','55','60' ,'65','70','75','80','85','90','95'], rotation=45 # 旋转标签防止重叠 ) ax.grid(True, linestyle='-.') ax.tick_params(labelcolor='r', labelsize='medium', width=3) plt.tight_layout() # 自动调整布局,避免标签被截断 plt.show()
关键修复说明
- 移除了错误的
ax.set_xlim((0, 1)),让matplotlib根据Split列的实际数值自动适配X轴范围,数据点不再被挤压。 - 将
ax.set_xticks(df.Score)改为ax.set_xticks(df.Split),使X轴刻度位置与每个数据点的Split值完全对应,标签自然对齐到标记点。 - 给
set_xticklabels添加了rotation=45参数,并使用plt.tight_layout()优化布局,解决标签重叠或被截断的问题。 - 确认
xticklabels的数量与df的行数一致,保证每个刻度都有对应的标签。
内容的提问来源于stack exchange,提问作者Pelide
相关产品推荐
相关产品推荐

