使用matplotlib制作散点图,x轴为日期,y轴为数值。

10

我在制作一个散点图时遇到了麻烦,需要从日期数组和一堆PM 2.5值中获取数据。我的列表看起来像下面这样:

dates = ['2015-12-20','2015-09-12']  
PM_25 = [80, 55]

plt.scatter(dates, PM_25) ?? - RSHAP
如果不起作用,错误信息是什么?您可能需要将日期转换为日期时间。如果您有pandas,可以使用[pd.to_datetime(d) for d in dates]进行转换。 - RSHAP
我遇到了这个错误:ValueError: invalid literal for float(): 2010-01-01 - Ravmcgav
4个回答

13

太好了!那我能否更具体一些,为每年指定月份甚至季节标签? - Ravmcgav
24
当我尝试在 x 轴上使用 datetime 创建散点图时,会出现 TypeError: invalid type promotion 错误。你提供的解决方案无效。 - dwanderson
1
我也遇到了像@dwanderson和@BCR一样的“无效类型提升”错误。将日期转换更改为dates = [d.to_pydatetime() for d in dates]对我有用。 - Tiffany G. Wilson
7
@TiffanyG.Wilson和其他人遇到了无效类型的推广错误。请执行以下操作:plt.scatter(list(df.time.values),list(df.y.values),color='r') - Apex
@Apex 谢谢。使用你的代码片段解决了问题。 - renny

3

如果要绘制包含日期数据的图表,可以使用 plot_date 命令。

与 plot() 命令类似,不同之处在于 x 或 y(或两者都是)的数据被视为日期,并且坐标轴带有标签。

首先将列表转换为日期时间,就像 @RSHARP 所展示的那样,

dates = [pd.to_datetime(d) for d in dates]

那么您可以使用plot_date函数。
plt.plot_date(dates, PM_25, c = 'red')

1

通常情况下,pandas数据框更为常见。因此,对我来说更加高效:

import pandas as pd
dates = ['2015-12-20','2015-09-12']  
PM_25 = [80, 55]
data = pd.DataFrame({'dates':pd.to_datetime(dates),'PM_25':PM_25})
data.plot(x='dates',y='PM_25',marker='o',linestyle='none')

而且您可以像这样定义更多:

data.plot(x='dates',y='PM_25',marker='o',linestyle='none',color='red',ms=3)

0
显然,最近图书馆进行了几次更新,其他答案都不起作用了。
使用@Apex,我们可以得到以下结果:
df = ...
plt.scatter(list(df.time.values),list(df.y.values),color='r')

在这种情况下,您可能会遇到以下错误:
ConversionError: Failed to convert value(s) to axis units: ...

基本上,这里有一个对 datetime64[us] 类型的检查。如果你事先将数据转换为这个类型,你就能避免在库中出现错误的代码部分。
所以,下面的代码目前运行良好:
df = ...
plt.scatter(list(df.time.astype('datetime64[us]').values),list(df.y.values),color='r')

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接