matplotlib 如何将不同的数据组从一个图表绘制成一个单一的图形

e0bqpujr  于 2023-11-22  发布在  其他
关注(0)|答案(5)|浏览(155)

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

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

字符串
每一年都有不同的时间记录,所以pandasdatetimeindices都是不同的。
我想把不同年份的数据绘制在同一张图中进行比较:

  • 从1月到12月,X轴为datetimeindices
  • Y轴是 * 温度 *

我该怎么做呢?

ukxgm1gy

ukxgm1gy1#

试试看:

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

字符串

apeeds0o

apeeds0o2#

如果你有一个正在运行的Python/Ipython笔记本,并且在使用时遇到问题;
第一个月
df2.plot(ax=ax)
在同一个单元格中运行命令!!由于某种原因,当它们被分成连续的单元格时,它不会工作。至少对我来说是这样。

vpfxa7rd

vpfxa7rd3#

  • Chang的答案展示了如何在同一个axes上绘制不同的DataFrame。
  • 在这种情况下,所有数据都在同一个 Dataframe 中,因此最好使用groupbyunstack
  • 或者,可以使用pandas.DataFrame.pivot_table
  • dfp = df.pivot_table(index='Month', columns='Year', values='value', aggfunc='mean')
  • 当使用pandas.read_csv时,names=在文件中没有列标题时创建列标题。'date'列必须解析为datetime64[ns] Dtype,以便.dt提取器可以用于提取monthyear
import pandas as pd

# given the data in a file as shown in the op
df = pd.read_csv('temp.csv', names=['date', 'time', 'value'], parse_dates=['date'])
    
# create additional month and year columns for convenience
df['Year'] = df.date.dt.year
df['Month'] = df.date.dt.month

# groupby the month a year and aggreate mean on the value column
dfg = df.groupby(['Month', 'Year'])['value'].mean().unstack()

# display(dfg)                     
Year        2005  2006       2007  2012
Month                                  
4            NaN  20.6        NaN  20.7
5            NaN   NaN  15.533333   NaN
8      19.566667   NaN        NaN   NaN

字符串
现在很容易将每年绘制为单独的线。OP每年只有一个观察结果,因此只显示一个标记。

ax = dfg.plot(figsize=(9, 7), marker='.', xticks=dfg.index)


的数据

8iwquhpp

8iwquhpp4#

要对多个嵌套框执行此操作,可以对它们执行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)

字符串
这也可以在没有if条件的情况下实现:

fig, ax = plt.subplots()
for BAR in dict_of_dfs.keys():
    dict_of_dfs[BAR].plot(ax=ax)

k97glaaz

k97glaaz5#

您可以在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)

字符串


的数据

相关问题