Pandas绘制时间序列X轴无时间显示问题求助
解决股票时间序列绘图X轴无时间显示的问题
嘿,我来帮你排查下这个问题!从你的代码和数据输出来看,核心问题出在时间索引的类型和顺序上,咱们一步步来解决:
问题原因分析
- 时间索引是字符串类型:你从tushare获取的
date索引是普通字符串(比如'2018-05-18'),不是pandas能识别的datetime时间类型。matplotlib无法把字符串自动解析成有意义的时间轴,所以X轴就没显示内容啦。 - 时间顺序是倒序:当前数据是从最新日期到最早日期排列的,即使显示时间轴,顺序也不符合咱们看时间序列的习惯。
修复后的代码
下面是调整后的代码,我加了详细注释:
import numpy as np import pandas as pd import matplotlib.pyplot as plt import tushare as ts # 获取股票数据 data = ts.get_hist_data('600048', start='2017-01-05') # 关键修复步骤: # 1. 将字符串格式的索引转换为datetime时间类型 data.index = pd.to_datetime(data.index) # 2. 按时间正序排序(从早到晚) data = data.sort_index() # 绘制收盘价曲线 data['close'].plot(style='r', lw=2.) # 可选:添加图表标题和轴标签,让图表更清晰 plt.title('600048 收盘价走势(2017-01-05起)') plt.xlabel('日期') plt.ylabel('收盘价') plt.show() # 查看处理后的数据 print(data.head())
修复步骤说明
pd.to_datetime(data.index):把原来的字符串索引转换成pandas的datetime64类型,这样matplotlib就能正确识别时间轴,自动生成合适的时间标签(比如按月/周显示)。data.sort_index():将数据按时间从早到晚排序,符合时间序列的常规展示逻辑,也让图表的趋势更直观。
另一种简化写法
如果你不想单独处理索引,也可以在绘图时指定X轴为时间列,不过上面的方法更符合pandas时间序列的处理习惯:
# 重置索引,把date变成普通列 data = data.reset_index() data['date'] = pd.to_datetime(data['date']) # 绘图时指定x轴为date列 plt.plot(data['date'], data['close'], color='r', linewidth=2.) plt.show()
这样调整后,你的X轴就会正常显示时间啦~
内容的提问来源于stack exchange,提问作者chen peng
相关产品推荐
相关产品推荐

