我有一个具有多年温度记录的温度文件,格式如下:
2012-04-12,16:13:09,20.6
2012-04-12,17:13:09,20.9
2012-04-12,18:13:09,20.6
2007-05-12,19:13:09,5.4
2007-05-12,20:13:09,20.6
2007-05-12,20:13:09,20.6
2005-08-11,11:13:09,20.6
2005-08-11,11:13:09,17.5
2005-08-13,07:13:09,20.6
2006-04-13,01:13:09,20.6
每年都有不同的数字,记录的时间,所以大熊猫的datetimeindices都不同。
我想在同一图中绘制不同年份的数据进行比较。 X轴是1月到12月,Y轴是温度。我该怎么做呢?
答案 0 :(得分:275)
尝试:
ax = df1.plot()
df2.plot(ax=ax)
答案 1 :(得分:24)
虽然Chang的答案解释了如何在同一个数字上多次绘制,但在这种情况下,使用groupby
和unstack
可能会更好:
(假设你已经在数据框中使用了这个,并且已经有了日期时间索引)
In [1]: df
Out[1]:
value
datetime
2010-01-01 1
2010-02-01 1
2009-01-01 1
# create additional month and year columns for convenience
df['Month'] = map(lambda x: x.month, df.index)
df['Year'] = map(lambda x: x.year, df.index)
In [5]: df.groupby(['Month','Year']).mean().unstack()
Out[5]:
value
Year 2009 2010
Month
1 1 1
2 NaN 1
现在很容易绘制(每年作为单独的一行):
df.groupby(['Month','Year']).mean().unstack().plot()
答案 2 :(得分:15)
如果您正在运行Jupyter / Ipython笔记本并且使用时遇到问题;
ax = df1.plot()
df2.plot(ax=ax)
在同一个单元格内运行命令!!出于某种原因,当它们被分成连续的细胞时,它不会起作用。对我来说至少。
答案 3 :(得分:3)
要为多个数据帧执行此操作,您可以对它们执行for循环:
fig = plt.figure(num=None, figsize=(10, 8))
ax = dict_of_dfs['FOO'].column.plot()
for BAR in dict_of_dfs.keys():
if BAR == 'FOO':
pass
else:
dict_of_dfs[BAR].column.plot(ax=ax)
答案 4 :(得分:0)
只需增强@ adivis12答案,就无需执行if
语句。这样写:
fig, ax = plt.subplots()
for BAR in dict_of_dfs.keys():
dict_of_dfs[BAR].plot(ax=ax)