在 Pandas 数据框中绘制 datetime.date / 时间序列。

16

我从特定的日历日期上创建了一个pandas数据框。以下是我的做法:

time_series = pd.DataFrame(df['Operation Date'].value_counts().reset_index())
time_series.columns = ['date', 'count']

基本上,这是两列,第一列“date”是一个包含datetime.date对象的列,第二列“count”只是整数值。现在,我想绘制散点图或KDE来表示该值如何随着日历天数变化而变化。

但是当我尝试时:

time_series.plot(kind='kde')
plt.show()

我得到了一个图表,其中x轴的范围从-50到150,好像以某种方式将datetime.date对象解析为整数。此外,它产生了两个相同的图表,而不是一个。

有什么想法可以绘制它们并在x轴上看到日历日期吗?


散点图不是核密度估计图,甚至不清楚你要求什么。请提供一些可重现的数据。 - ℕʘʘḆḽḘ
这是我的数据框长什么样子: 2016-08-05 652016-11-23 34等。我该如何绘制它们? - guy
2个回答

39

你确定你有日期时间吗?我刚试了一下,它可以正常工作:

df =    date    count
7   2012-06-11 16:51:32 1.0
3   2012-09-28 08:05:14 12.0
19  2012-10-01 18:01:47 4.0
2   2012-10-03 15:18:23 29.0
6   2012-12-22 19:50:43 4.0
1   2013-02-19 19:54:03 28.0
9   2013-02-28 16:08:40 17.0
12  2013-03-12 08:42:55 6.0
4   2013-04-04 05:27:27 6.0
17  2013-04-18 09:40:37 29.0
11  2013-05-17 16:34:51 22.0
5   2013-07-07 14:32:59 16.0
14  2013-10-22 06:56:29 13.0
13  2014-01-16 23:08:46 20.0
15  2014-02-25 00:49:26 10.0
18  2014-03-19 15:58:38 25.0
0   2014-03-31 05:53:28 16.0
16  2014-04-01 09:59:32 27.0
8   2014-04-27 12:07:41 17.0
10  2014-09-20 04:42:39 21.0

df = df.sort_values('date', ascending=True)
plt.plot(df['date'], df['count'])
plt.xticks(rotation='vertical')

这里输入图片描述

编辑:

如果您想要一个散点图,您可以:

plt.plot(df['date'], df['count'], '*')
plt.xticks(rotation='vertical')

输入图片说明


1
谢谢,那个方法奏效了。另外,我删除了你第二行代码中的反斜杠,不确定为什么你会包含它.....谢谢! - guy
3
我不确定是否为时已晚,但我想知道“plt”代表什么? - SPS
1
import matplotlib.pyplot as plt - epattaro
这非常有帮助且直截了当,是一个非常通用的答案。 - msarafzadeh
有没有办法使用另一个变量来为这个图形添加颜色? - Christa
嗨,Christina,这里有一个颜色参数,请参考此帖子:https://dev59.com/UGEh5IYBdhLWcg3wbjEW ,在同一图中绘制多个图形也是可能的,每个图形都有自己的颜色。为此,只需运行N次plot命令,每次使用其数据和颜色参数即可。 - epattaro

1
如果列是datetime dtype(而不是object),那么您可以直接在数据帧上调用plot()。您也不需要按日期排序,如果x轴是datetime,则会在后台完成。
df['date'] = pd.to_datetime(df['date'])
df.plot(x='date', y='count', kind='scatter', rot='vertical');

res

你也可以传入许多参数来使绘图更加美观(添加标题,更改 figsize 和 fontsize,旋转 ticklabels,设置子图轴等)。请参阅文档以获取可能参数的完整列表。

df.plot(x='date', y='count', kind='line', rot=45, legend=None, 
        title='Count across time', xlabel='', fontsize=10, figsize=(12,4));

res2

你甚至可以使用另一列来给散点图上色。在下面的示例中,月份被用来分配颜色。提示:要获取可能的全部颜色映射列表,请将任意无意义的字符串传递给colormap,错误消息将显示完整列表。
df.plot(x='date', y='count', kind='scatter', rot=90, c=df['date'].dt.month, colormap='tab20', sharex=False);

res4


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