多年时间序列的Python小时热力图

3

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

enter image description here

数据用于绘制的是从Excel表格中读取的。Excel表格格式为"年""月""日""小时""温度"

我使用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'})

获取此图表:

输入图像描述

我该如何生成一个

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

每个月和每年都要做什么?
2个回答

2

Seaborn热力图不允许我绘制具有不同轴的多个图形。我通过使用SNS在一个图形中创建了一个图形,其中包含多个图形。它不像参考图表那样可定制。很抱歉我们无法帮助您。

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


0

这可能有帮助-使用Python的ggplot2实现plotnine制作小时级热力图

还有一个指南,可以在Python图库-用于时间序列的热力图matplotlib上生成这个确切的图(为两年的数据)

我恐怕不知道任何Python,所以不想复制/粘贴,以防我错过了什么。然而,我用R创建了原始图表 :) 主要技巧是使用facet_grid按年份和月份拆分数据,并反转y轴标签。

看起来像是:

fig, axes = plt.subplots(2, 12, figsize=(14, 10), sharey=True)

for i, year in enumerate([2004, 2005]):
    for j, month in enumerate(range(1, 13)):
        single_plot(data, month, year, axes[i, j])

这个程序可以按年份和月份进行拆分。
希望这能帮助你更进一步。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接