簡體   English   中英

帶有日期時間軸的Seaborn熱圖

[英]Seaborn Heatmap with Datetime Axes

我並創建一個熱圖,該熱圖在x軸上有年份,在y軸上有月份。 在熱圖中將顯示%回報。 這有點我所追求的。

熱圖

因此,我有一些數據,並將它們轉換為pct_change()系列。

import pandas_datareader.data as web
import pandas as pd
from datetime import datetime as dt
import numpy as np
import seaborn as sns

start = dt(year = 2000, month = 1, day = 1)

df = web.DataReader('GDP', 'fred', start = '2000')
df.pct_change()
df.tail()

這就是我們正在合作的東西。 重要的是要注意,索引是一個Datetime對象。

    GDP
DATE    
2016-10-01  18905.545
2017-01-01  19057.705
2017-04-01  19250.009
2017-07-01  19500.602
2017-10-01  19736.491

我想做這樣的事情,但是我不知道如何用datetime索引實現它

gdp = df.pivot(df.index.month, df.index.year, "GDP")
ax = sns.heatmap(gdp)

哪個(預期)不起作用...

KeyError: "Int64Index([ 1,  4,  7, 10,  1,  4,  7, 10,  1,  4,  7, 10,  1,  4,  7, 10,  1,\n             4,  7, 10,  1,  4,  7, 10,  1,  4,  7, 10,  1,  4,  7, 10,  1,  4,\n             7, 10,  1,  4,  7, 10,  1,  4,  7, 10,  1,  4,  7, 10,  1,  4,  7,\n            10,  1,  4,  7, 10,  1,  4,  7, 10,  1,  4,  7, 10,  1,  4,  7, 10,\n             1,  4,  7, 10],\n           dtype='int64', name='DATE') not in index"

由於您要在pivot功能中提取月份和年份,並且這些信息不在您指定的原始df ,因此它不起作用。

您可以預先指定它們:

df["Year"] = df.DATE.apply(lambda x: x.year)
df["Month"] = df.DATE.apply(lambda x: x.strftime("%B"))
df.pivot_table(index="Month",columns="Year",values="GDP", aggfunc="sum").fillna(0)
months = ["Jan", "Feb", "Mar", "Apr", "May", "Jun", "Jul", "Aug", "Sep", "Oct", "Nov", "Dec"]
pt = pt.reindex_axis(months)
sns.heatmap(pt, annot=True)

我為行重新索引,因為在調用pivot_table ,它以升序對列或行進行排序,而這通常不是月份名稱的排序方式。

以上給了我: 在此處輸入圖片說明

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM