繁体   English   中英

日期列和 integer 列之间的 Seaborn 热图

[英]Seaborn heatmap between date column and integer column

我有一个包含'Date'列和'Tweet_Count'列的 Dataframe。

我想要 plot 一个热图,它将显示一个月中每一天的推文计数。

数据框示例

使用此代码:

uk = uk_df.pivot("Date", "Tweet_Count")
ax = sns.heatmap(uk)

我收到一个错误:

TypeError: '<=' not supported between instances of 'float' and 'str'

任何帮助将非常感激。 谢谢你。

您正在寻找的sns.heatmap所需的 DataFrame 格式是一个 pivot 表,其indexcolumnsvalues作为DateCountryTweet_Countpivot 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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM