多年时间序列python中的每小时热图

时间:2020-07-07 11:50:54

标签: python matplotlib seaborn heatmap subplot

我需要创建一个每小时平均温度的多图热图,如下所示:

enter image description here

持续七年。从Excel表中读取要绘制的数据。 Excel工作表的格式为"year""month""day""hour""Temp"

我使用下面的代码使用seaborn库创建了平均的热图:

df = pd.read_excel('D:\\Users\\CO2_heatmap.xlsx')
co2=df.pivot_table(index="month",columns="year",values='CO2',aggfunc="mean")
ax = sns.heatmap(co2,cmap='bwr',vmin=370,vmax=430, cbar_kws={'label': '$\mathregular{CO_2}$ [ppm]', 'orientation': 'vertical'})

获取此图:

enter image description here

如何生成一个

co2=df.pivot_table(index="hour",columns="day",values='CO2',aggfunc="mean")

每年和每年?

1 个答案:

答案 0 :(得分:1)

海洋热图不允许我绘制多个不同轴的图。我通过SNSing一个带有多个图的图创建了一个图。它不能像参考图一样进行自定义。抱歉,我们无法为您提供帮助。

import pandas as pd
import numpy as np
import random

date_rng  = pd.date_range('2018-01-01', '2019-12-31',freq='1H')
temp = np.random.randint(-30.0, 40.0,(17497,))
df = pd.DataFrame({'CO2':temp},index=pd.to_datetime(date_rng))
df.insert(1, 'year', df.index.year)
df.insert(2, 'month', df.index.month)
df.insert(3, 'day', df.index.day)
df.insert(4, 'hour', df.index.hour)
df = df.copy()
yyyy = df['year'].unique()
month = df['month'].unique()

import matplotlib.pyplot as plt
import seaborn as sns

fig, axes = plt.subplots(figsize=(20,10), nrows=2, ncols=12)

for m, ax in zip(range(1,25), axes.flat):
    if m <= 12:
        y = yyyy[0]
        df1 = df[(df['year'] == y) & (df['month'] == m)]
    else:
        y = yyyy[1]
        m -= 12
        df1 = df[(df['year'] == y) & (df['month'] == m)]
    df1 = df1.pivot_table(index="hour",columns="day",values='CO2',aggfunc="mean")
    plt.figure(m)
    sns.heatmap(df1, cmap='RdBu', cbar=False, ax=ax)

enter image description here