[英]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.