Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/python-3.x/18.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 周与日的seaborn热量图_Python_Python 3.x_Seaborn_Heatmap - Fatal编程技术网

Python 周与日的seaborn热量图

Python 周与日的seaborn热量图,python,python-3.x,seaborn,heatmap,Python,Python 3.x,Seaborn,Heatmap,我需要生成一个热图,在热图中,我必须将天安排为列,将week_num安排为行,绿色表示积极的一天,红色表示消极的一天。 它应该每天和每周都有休息时间 我曾尝试使用seaborn library,但未能成功绘制此图。有人能帮我吗 week_num day color_code 1 2020-05-01 red 1 2020-05-02 green 2 2020-05-05 red 2 2020-05-06 red 3

我需要生成一个热图,在热图中,我必须将天安排为列,将week_num安排为行,绿色表示积极的一天,红色表示消极的一天。 它应该每天和每周都有休息时间

我曾尝试使用seaborn library,但未能成功绘制此图。有人能帮我吗

week_num    day    color_code
    1   2020-05-01  red
    1   2020-05-02  green
    2   2020-05-05  red
    2   2020-05-06  red
    3   2020-05-13  green
    3   2020-05-14  green
    3   2020-05-15  red

我猜你指的是一周中的某一天,否则这将是一个非常奇怪的热图。您可以尝试下面的方法,基本上是在data.frame中,将星期几作为另一列,然后将其转换为广泛的格式并绘制。sns.heatmap不接受分类值,因此您需要将其替换为0,1,并在图例中相应地标记它们:

import pandas as pd
import numpy as np
import seaborn as sns
import matplotlib.pyplot as plt

dates = pd.date_range(start='1/1/2018', periods=60, freq='1D')
color_code = np.random.choice(['green','red'],60)
df = pd.DataFrame({'dates':dates ,'color_code':color_code})
df['week_num'] = df['dates'].dt.strftime("%W")
df['day_num'] = df['dates'].dt.weekday

fig, ax = plt.subplots(1, 1, figsize = (5, 3))

df_wide = df.pivot_table(index='week_num',columns='day_num',values='color_code',
aggfunc=lambda x:x)
sns.heatmap(df_wide.replace({'green':0,'red':1}),cmap=["#2ecc71","#e74c3c"],
            linewidths=1.0,ax=ax)
colorbar = ax.collections[0].colorbar
colorbar.set_ticks([0.25,0.75])
colorbar.set_ticklabels(['green','red'])