在同一图中绘制不同的数据框


92

我有一个具有多年温度记录的温度文件,格式如下:

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轴为温度。我应该怎么做呢?

Answers:


30

尽管Chang的答案说明了如何在同一图形上多次绘制,但是在这种情况下,使用a groupbyunstacking 可能会更好:

(假设您已经在数据框中使用了日期时间索引)

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()

338

尝试:

ax = df1.plot()
df2.plot(ax=ax)

1
如果在ipython笔记本上,该如何实现?是否有保留或显示功能,仅在设置所有设置后才打印图形?
滇盛

1
设置%matplotlib inline导入位置,以便可视化内容显示在iPython笔记本中。
哈桑·拜格,

1
任何线索都可以解决,如果有三个以上的数据帧?
RPT

这真太了不起了。我将回答如何处理超过3个dfs
adivis12

3
您确定这适用于任何类型plot(),即,何时将任何类型的规范作为参数传递给plot函数?
gented '17

26

如果您正在运行Jupyter / Ipython笔记本并且在使用时遇到问题;

ax = df1.plot()

df2.plot(ax=ax)

在同一单元格内运行命令!由于某些原因,当它们分成顺序的单元格时,它将无法工作。至少对我来说。


6

要对多个数据框执行此操作,可以对其进行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)

0

只是为了增强@ adivis12的答案,您不需要执行if声明。像这样说:

fig, ax = plt.subplots()
for BAR in dict_of_dfs.keys():
    dict_of_dfs[BAR].plot(ax=ax)
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.