我一直试图从CSV文件中绘制一个时间序列图。我设法读取该文件,并使用strptime
将数据从字符串转换为日期,并存储在列表中。当我试图在matplotlib中绘制一个测试图时,列表包含日期信息,它将日期绘制为一系列点;也就是说,对于日期2012-may-31 19:00
,我得到了一个在y轴上2012, 05, 19, 31, 00
处有一个点的图,用于x=1
的值等。我明白这不是传递日期信息的正确方法。有人能告诉我如何正确传递此信息吗?
我一直试图从CSV文件中绘制一个时间序列图。我设法读取该文件,并使用strptime
将数据从字符串转换为日期,并存储在列表中。当我试图在matplotlib中绘制一个测试图时,列表包含日期信息,它将日期绘制为一系列点;也就是说,对于日期2012-may-31 19:00
,我得到了一个在y轴上2012, 05, 19, 31, 00
处有一个点的图,用于x=1
的值等。我明白这不是传递日期信息的正确方法。有人能告诉我如何正确传递此信息吗?
2条答案
按热度按时间0sgqnhkj1#
将x轴数据从文本转换为
datetime.datetime
,使用datetime.strptime
:这是一个如何在拥有datetime数组后绘制数据的示例:
vfh0ocws2#
1.确保数据为
datetime
(或datetime64
)绘制时间序列数据的一个常见问题是,数据通常不是
datetime
类型,而是类似于日期时间的字符串(如"2023-03-23 07:13:13"
),如果数据是从文件中读取的,这种情况尤其常见。如果csv文件被读入pandas dataframe,使用
pd.to_datetime()
转换为datetime。例如,2.按日期排序
为了制作一个可读的图,重要的是数据被排序(按日期)。例如,在#1中的示例中给出的
x
和y
在左边绘制图形,而按升序排序的x
在右边绘制图形。3.绘制多个时间序列
要在同一个图上绘制多个时间序列,只需调用
plt.plot
两次。4.均匀间隔画竖线
Matplotlib有
dates
模块,它有一些方便的函数,可以将数字转换为日期时间,反之亦然,用字符串格式化日期等。由于x-tick位置在matplotlib图中是数字,我们可以使用matplotlib.dates.num2date()
方法将它们转换为日期,并使用这些日期绘制特定日期时间的垂直线。例如,要绘制每年1月1日00:00:00的垂直线,使用x-limits获取年份并创建1月1日的新日期时间。matplotlib.dates
也可用于将日期格式化为特定字符串。