如何避免matplotlib绘制时间序列散点图时忽略数据中的时间间隔
问题解决方法
问题根源
- 调用
pd.read_csv读取数据时,date列默认被识别为字符串类型,绘图时会作为分类变量处理,不计算实际日期间隔,直接均匀排列所有分类值,因此2020到2021年之间的空白不会显示 plt.xticks = data.date的写法错误,plt.xticks是调用方法而非可直接赋值的属性,该代码不仅不会生效,还会覆盖原方法导致后续绘图异常。
解决方案
只需将date列转换为pandas的datetime时间类型即可,matplotlib会自动按照时间的实际间隔排布x轴,和Excel的展示效果一致,代码如下:
import matplotlib.pyplot as plt import pandas as pd # 方法1:读取数据时直接解析日期列 data = pd.read_csv('data.csv', parse_dates=['date']) # 方法2:读取数据后手动转换,两种方法选其一即可 # data['date'] = pd.to_datetime(data['date']) data.plot.scatter('date', 'count') # 可加旋转刻度防止日期重叠 plt.xticks(rotation=45) plt.show()
如果需要自定义x轴刻度的显示格式和密度,可以搭配matplotlib的日期工具调整,示例如下:
import matplotlib.dates as mdates ax = plt.gca() # 设置主刻度为每月1号 ax.xaxis.set_major_locator(mdates.MonthLocator()) # 设置主刻度显示格式为 年-月 ax.xaxis.set_major_formatter(mdates.DateFormatter('%Y-%m')) plt.xticks(rotation=45)
内容的提问来源于stack exchange,提问作者iammax
相关产品推荐
相关产品推荐

