使用matplotlib绘制pandas DataFrame时x轴日期索引格式错误如何解决
问题原因
matplotlib直接接收整个DataFrame作为绘图参数时,不会主动解析pandas的DatetimeIndex类型,只会将索引视为普通序列值处理,因此无法正确渲染为日期格式。
解决方法
有两种常用的修复方案:
方案1:绘图时显式指定x轴、y轴数据
调用plt.plot()时主动传入日期索引作为x轴,对应数值列作为y轴,即可让matplotlib正确识别日期类型:
import pandas as pd import matplotlib.pyplot as plt dttm = ["2021-01-01", "2021-01-02", "2021-01-03"] dttm = pd.to_datetime(dttm) data = [10, 20, 30] DF = pd.DataFrame() DF['value'] = data DF = DF.set_index(dttm) # 仅修改这一行,显式传入x和y plt.plot(DF.index, DF['value']) plt.gcf().autofmt_xdate() plt.show()
方案2:使用pandas内置的plot接口
pandas的plot方法原生适配自身的索引和列结构,会自动处理日期索引的渲染逻辑,写法更简洁:
import pandas as pd import matplotlib.pyplot as plt dttm = ["2021-01-01", "2021-01-02", "2021-01-03"] dttm = pd.to_datetime(dttm) data = [10, 20, 30] DF = pd.DataFrame() DF['value'] = data DF = DF.set_index(dttm) # 直接调用DataFrame的plot方法 DF.plot() plt.gcf().autofmt_xdate() plt.show()
可选:自定义日期显示格式
如果需要进一步调整x轴日期的展示格式,可以搭配matplotlib的日期格式化工具使用:
import matplotlib.dates as mdates # 其他代码和上述一致 plt.plot(DF.index, DF['value']) # 设置x轴日期格式为 年-月-日 plt.gca().xaxis.set_major_formatter(mdates.DateFormatter('%Y-%m-%d')) plt.gcf().autofmt_xdate() plt.show()
内容的提问来源于stack exchange,提问作者Sylv99
相关产品推荐
相关产品推荐

