在同一图中绘制不同的DataFrame

wuw*_*cat 80 python matplotlib pandas

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

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
Run Code Online (Sandbox Code Playgroud)

每年都有不同的数字,记录的时间,所以大熊猫的datetimeindices都是不同的.

我想在同一图中绘制不同年份的数据进行比较.X轴是1月到12月,Y轴是温度.我应该怎么做呢?

Cha*_*She 293

尝试:

ax = df1.plot()
df2.plot(ax=ax)
Run Code Online (Sandbox Code Playgroud)

  • 你确定这适用于*plot()`的任何类型*,即任何类型的规范作为参数传递到`plot`函数? (2认同)

And*_*den 26

虽然Chang的答案解释了如何在同一个数字上多次绘图,但在这种情况下,使用groupbyunstacking 可能会更好:

(假设你在数据帧中有这个,已经有datetime索引)

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
Run Code Online (Sandbox Code Playgroud)

现在很容易绘制(每年作为一个单独的行):

df.groupby(['Month','Year']).mean().unstack().plot()
Run Code Online (Sandbox Code Playgroud)


Ham*_*son 15

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

ax = df1.plot()

df2.plot(ax=ax)

在同一个单元格内运行命令!! 出于某种原因,当它们被分成连续的细胞时,它不会起作用.对我来说至少.


adi*_*s12 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)
Run Code Online (Sandbox Code Playgroud)