[英]Seaborn heatmap between date column and integer column
您正在寻找的sns.heatmap
所需的 DataFrame 格式是一个 pivot 表,其index
、 columns
和values
作为Date
、 Country
和Tweet_Count
到pivot
pandas
作为pivot
在过去的版本中有问题):
Country UK
Date
2020-03-01 400
2020-03-02 1000
2020-03-03 100
因此,您只需将Country
也传递给 pivot :
uk = pd.DataFrame({'Country': {0: 'UK', 1: 'UK', 2: 'UK'},
'Date': {0: '2020-03-01', 1: '2020-03-02', 2: '2020-03-03'},
'Tweet_Count': {0: 100, 1: 200, 2: 300}})
uk['Date'] = pd.to_datetime(uk['Date']).dt.date
uk = uk.pivot("Date", "Country", 'Tweet_Count')
ax = sns.heatmap(uk)
向下滚动到这里的第四个代码块:
值得一提的是,您还可以注释:
ax = sns.heatmap(uk, annot=True, fmt="d")
假设数据看起来像这样,下面我有两个国家
import pandas as pd
import numpy as np
import seaborn as sns
import matplotlib.pyplot as plt
Date = pd.date_range(start='1/3/2020', periods=30,freq="D").strftime('%Y-%m-%d').to_list()
df = pd.DataFrame({'Country':np.repeat(['UK','KU'],len(Date)),
'Date':Date*2,
'Tweet_Count':np.random.randint(1000,2000,len(Date)*2)})
df.head()
Country Date Tweet_Count
0 UK 2020-01-03 1809
1 UK 2020-01-04 1419
2 UK 2020-01-05 1463
3 UK 2020-01-06 1576
4 UK 2020-01-07 1137
如果只有 1 个国家/地区,则转置将起作用:
fig, ax = plt.subplots(figsize=(8,2))
uk = df[df['Country']=="UK"]
ax = sns.heatmap(uk[['Date','Tweet_Count']].set_index('Date').T)
如果有 2 个或更多:
wide_df = df.pivot_table(index="Country",columns="Date",fill_value="Tweet_Count")
wide_df.columns = [j for i,j in wide_df.columns]
fig, ax = plt.subplots(figsize=(8,2))
ax = sns.heatmap(wide_df)
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.