如何修复Matplotlib中股票十年数据绘图的X轴标签重叠问题
解决Matplotlib绘制股票走势时X轴标签重叠问题
我用DataFrame绘制十年跨度的每日股票收盘价走势,运行以下代码后,X轴的日期标签出现严重重叠,想要实现类似参考图那样清晰的X轴显示效果。
原代码:
df = pd.read_csv("USO.csv") df = df[['Date', 'Close']] df = df.set_index('Date') plt.plot(df.index, df['Close'], color='forestgreen')
当前效果:
期望效果:
方法1:转换日期索引为datetime类型,让Matplotlib自动处理日期格式化
Matplotlib对字符串日期的支持较差,将索引转为datetime类型后,它会自动优化刻度显示,再配合自动旋转标签即可解决重叠问题:
import pandas as pd import matplotlib.pyplot as plt df = pd.read_csv("USO.csv") df['Date'] = pd.to_datetime(df['Date']) # 把日期列转为datetime类型 df = df.set_index('Date') plt.plot(df.index, df['Close'], color='forestgreen') plt.gcf().autofmt_xdate() # 自动旋转日期标签,避免横向重叠 plt.show()
方法2:手动设置刻度间隔与标签样式
如果需要更个性化的显示效果,可以手动指定刻度间隔(比如每年一个刻度),并调整标签角度:
import pandas as pd import matplotlib.pyplot as plt from matplotlib.dates import YearLocator, DateFormatter df = pd.read_csv("USO.csv") df['Date'] = pd.to_datetime(df['Date']) df = df.set_index('Date') fig, ax = plt.subplots() ax.plot(df.index, df['Close'], color='forestgreen') # 设置X轴主刻度为每年一个 ax.xaxis.set_major_locator(YearLocator()) # 设置日期显示格式为年份 ax.xaxis.set_major_formatter(DateFormatter('%Y')) # 旋转标签45度避免重叠 plt.xticks(rotation=45) plt.tight_layout() # 调整布局,防止标签被图框截断 plt.show()
方法3:直接使用Pandas内置绘图(最简便)
Pandas的plot方法已经内置了日期刻度优化逻辑,无需额外配置就能得到清晰的X轴:
import pandas as pd import matplotlib.pyplot as plt df = pd.read_csv("USO.csv") df['Date'] = pd.to_datetime(df['Date']) df = df.set_index('Date') df['Close'].plot(color='forestgreen') plt.gcf().autofmt_xdate() plt.show()
内容的提问来源于stack exchange,提问作者Yeetle
相关产品推荐
相关产品推荐

