120

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

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

每年都有不同的数字,记录的时间,所以熊猫的日期时间索引都是不同的。

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

4

6 回答 6

381

尝试:

ax = df1.plot()
df2.plot(ax=ax)
于 2012-12-14T05:09:24.720 回答
38

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

ax = df1.plot()

df2.plot(ax=ax)

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

于 2017-07-20T21:17:49.860 回答
34

尽管 Chang 的回答解释了如何在同一个图形上多次绘制,但在这种情况下,使用 agroupbyunstacking 可能会更好:

(假设您在数据框中有这个,并且已经有日期时间索引)

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()
于 2012-12-14T10:24:59.393 回答
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)
于 2017-11-30T00:30:50.787 回答
2

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

fig, ax = plt.subplots()
for BAR in dict_of_dfs.keys():
    dict_of_dfs[BAR].plot(ax=ax)
于 2020-03-25T11:14:45.900 回答
0

您可以使用 中的hue参数seaborn。例如:

import seaborn as sns
df = sns.load_dataset('flights')

     year month  passengers
0    1949   Jan         112
1    1949   Feb         118
2    1949   Mar         132
3    1949   Apr         129
4    1949   May         121
..    ...   ...         ...
139  1960   Aug         606
140  1960   Sep         508
141  1960   Oct         461
142  1960   Nov         390
143  1960   Dec         432

sns.lineplot(x='month', y='passengers', hue='year', data=df)

在此处输入图像描述

于 2021-12-15T15:56:57.343 回答