簡體   English   中英

Plotly:如何使用日期值創建熱圖?

[英]Plotly: How to create a heatmap with date values?

I have a pandas DataFrame with columns = [A, B, C, D] and rows = [a, b, c, d]. 我的 dataframe 的每個單元格都有一個特定的日期。 我想創建一個熱圖,因為較晚的日期與較早的日期顏色不同。

通過將我的日期時間變量轉換為時間戳,我設法用 plotly 做一些事情。 但我想用日期時間(時間戳)注釋每個單元格。 有沒有辦法用 Plotly 做到這一點?

您可以使用與Plotly 的答案相同的方法:How to round display text in annotated heatmap but keep full format on hover? 只要您將日期作為熱圖輸入的數字值處理,並將日期作為字符串用於注釋。 我喜歡在pd.Timestamp()to_pydatetime()之間切換,並設置一個諸如datetime.datetime(1970,1,1)之類的紀元來計算時差。 下面的熱圖由 pandas dataframe 生成,日期為字符串。 如果您想從 dataframe 開始,請告訴我任何其他格式的日期。

數據

data = {'A': ['2020-6-6', '2020-10-10', '2020-12-12'],
        'B': ['2019-6-6', '2019-10-10', '2019-12-12'],
        'C': ['2018-6-6', '2018-10-10', '2018-12-12']}

熱圖

在此處輸入圖像描述

代碼

import plotly.express as px
import plotly.figure_factory as ff
import pandas as pd
import datetime

# source is a pandas dataframe with dates as strings
data = {'A': ['2020-6-6', '2020-10-10', '2020-12-12'],
        'B': ['2019-6-6', '2019-10-10', '2019-12-12'],
        'C': ['2018-6-6', '2018-10-10', '2018-12-12']}
dfi = pd.DataFrame(data)

# grab dates as strings for use as labels later
z_text = [[y for y in x] for x in dfi.values.tolist()]

# convert df to pandas datetime
dfi = dfi.apply(pd.to_datetime)

# set epoch
epoch = datetime.datetime(1970,1,1)

# convert difference in days from all dates to epoch
# to use as input for color scheme in heatmap
days = [[ (pd.Timestamp(r).to_pydatetime()-epoch).days for r in dfi[col].values] for col in dfi.columns]
df = pd.DataFrame(days)
df.columns, df.index = dfi.columns,  dfi.columns
z = df.values.tolist()

# build heatmap
fig = ff.create_annotated_heatmap(z, x=list(df.columns),
                                     y=list(df.columns),
                                     annotation_text=z_text, colorscale='agsunset')

# add title
fig.update_layout(title_text='<i><b>Heatmap with dates</b></i>',
                  #xaxis = dict(title='x'),
                  #yaxis = dict(title='x')
                 )

# add custom xaxis title
fig.add_annotation(dict(font=dict(color="black",size=14),
                        x=0.5,
                        y=-0.15,
                        showarrow=False,
                        text="",
                        xref="paper",
                        yref="paper"))

# add custom yaxis title
fig.add_annotation(dict(font=dict(color="black",size=14),
                        x=-0.35,
                        y=0.5,
                        showarrow=False,
                        text="",
                        textangle=-90,
                        xref="paper",
                        yref="paper"))

# adjust margins to make room for yaxis title
# fig.update_layout(margin=dict(t=50, l=200))
# add colorbar
# fig['data'][0]['showscale'] = True

fig.show()

我使用 seaborn 作為熱圖。

import pandas as pd
import seaborn as sns

df = pd.read_csv('Dataset.csv')

Heatmap
sns.set(rc={'figure.figsize':(11.7,8.27)})
sns.heatmap(df.corr().round(2),square=True,cmap="RdYlGn",annot=True)

文檔: https://seaborn.pydata.org/generated/seaborn.heatmap.html

暫無
暫無

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

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