在同一个图中绘制不同的 DataFrame
Posted
技术标签:
【中文标题】在同一个图中绘制不同的 DataFrame【英文标题】:Plot different DataFrames in the same figure 【发布时间】:2012-12-02 02:12:06 【问题描述】:我有一个温度文件,有多年的温度记录,格式如下:
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 轴是温度。我该怎么做呢?
【问题讨论】:
【参考方案1】:试试:
ax = df1.plot()
df2.plot(ax=ax)
【讨论】:
如果在ipython notebook上,如何实现?是否有保留或显示功能仅在设置所有设置后才打印图表? 设置%matplotlib inline
进行导入的位置,以便您的可视化显示在 iPython 笔记本中。
如果有超过 3 个数据帧,任何线索如何工作?
这太棒了。我会回答如何处理超过 3 个 dfs
您确定这适用于plot()
的任何类型,即每当任何类型的规范作为参数传递给plot
函数时?【参考方案2】:
虽然 Chang 的回答解释了如何在同一个图形上多次绘制,但在这种情况下,使用 groupby
和 unstack
ing 可能会更好:
(假设您在数据框中有这个,并且已经有日期时间索引)
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()
【讨论】:
【参考方案3】:如果您正在运行 Jupyter/Ipython 笔记本并遇到问题;
ax = df1.plot()
df2.plot(ax=ax)
在同一个单元格内运行命令!!由于某种原因,当它们被分成连续的单元格时,它不会起作用。至少对我来说。
【讨论】:
【参考方案4】:要对多个数据帧执行此操作,您可以对它们执行 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)
【讨论】:
【参考方案5】:只是为了增强@adivis12 的答案,您不需要执行if
语句。像这样写:
fig, ax = plt.subplots()
for BAR in dict_of_dfs.keys():
dict_of_dfs[BAR].plot(ax=ax)
【讨论】:
谢谢,但你真的能做一个 dict_of_dfs 吗?是不是无法使用? 但是 dict_of_dfs 只有字符串作为键。所以它们是可散列的。【参考方案6】:您可以使用seaborn
中的hue
参数。例如:
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)
【讨论】:
以上是关于在同一个图中绘制不同的 DataFrame的主要内容,如果未能解决你的问题,请参考以下文章