如何在Matplotlib图表X轴显示全部30个日期?
解决Matplotlib折线图X轴显示全部30个日期的问题
Matplotlib默认会自动隐藏部分X轴标签来避免重叠,要显示全部30个日期,只需手动指定刻度并调整标签显示方式即可,步骤如下:
1. 确保日期数据为datetime类型
首先要保证你的date列是pandas的datetime格式,否则Matplotlib无法正确识别日期顺序和格式:
df['date'] = pd.to_datetime(df['date'])
2. 手动设置X轴刻度与标签
通过plt.xticks()指定所有日期作为刻度,并旋转标签角度防止重叠,同时调整画布大小给标签足够空间:
完整示例代码
import pandas as pd import matplotlib.pyplot as plt # 替换为你的Web API数据获取逻辑 # 示例:模拟30条日期和收盘价数据 df = pd.DataFrame({ 'date': pd.date_range(start='2020-01-02', periods=30), 'close': [102.5, 103.1, 104.0, 103.8, 105.2, 106.0, 105.5, 106.8, 107.2, 106.9, 108.1, 109.0, 108.5, 110.2, 111.0, 110.8, 112.1, 113.0, 112.5, 114.2, 115.0, 114.8, 116.1, 117.0, 116.5, 118.2, 119.0, 118.8, 120.1, 121.0] }) # 确保日期格式正确 df['date'] = pd.to_datetime(df['date']) # 调整画布大小,给X轴标签留出空间 plt.figure(figsize=(14, 6)) # 绘制折线图 plt.plot(df['date'], df['close'], marker='.', linestyle='-', color='#1f77b4') # 设置X轴显示所有日期,旋转标签60度避免重叠 plt.xticks( ticks=df['date'], labels=df['date'].dt.strftime('%Y-%m-%d'), rotation=60, fontsize=10 ) # 添加图表标题和坐标轴标签 plt.title('股票AAA收盘价走势', fontsize=14) plt.xlabel('日期', fontsize=12) plt.ylabel('收盘价', fontsize=12) # 自动调整布局,防止标签被画布边缘裁剪 plt.tight_layout() plt.show()
关键说明
plt.xticks(ticks=df['date']):强制Matplotlib使用所有日期作为X轴刻度rotation=60:旋转标签角度,避免横向排列时重叠figsize=(14,6):加宽画布,给X轴标签足够显示空间plt.tight_layout():自动调整图表元素位置,防止标签被裁剪
如果标签还是略显拥挤,可以尝试缩小fontsize参数值,或者进一步加大画布宽度。
内容的提问来源于stack exchange,提问作者showkey
相关产品推荐
相关产品推荐

