样式化 Seaborn 和 Plotly 热图

Posted

技术标签:

【中文标题】样式化 Seaborn 和 Plotly 热图【英文标题】:Style Seaborn and Plotly heatmaps 【发布时间】:2019-05-25 00:40:37 【问题描述】:

我用 Seaborn 创建了一个情节:

# imports
import random

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

# create some random data
N = 20
rand_matrix = np.asarray([random.randrange(1,11)/10 for _ in range(1, N*N+1) ]).reshape(N,N)
data = np.flip(np.triu(rand_matrix), 1)
df = pd.DataFrame(data, index=pd.date_range(start='2015-01-01', freq='MS',\ 
                  periods=N), columns = range(1,N+1))
df[1]=1

# seaborn plot
plt.figure(figsize=(20,20))
sns.heatmap(data = df,
            annot = True,
            vmin = 0.0,
            vmax = 1.0,
            cmap = 'PuBuGn')

这是我创建 Plotly 情节的方法:

import plotly.offline as py
import plotly.graph_objs as go

py.init_notebook_mode(connected=True)

data = [
    go.Heatmap(
        z=df.values,
        x=df.columns.tolist(),
        y=df.index.tolist()
    )
]

layout = go.Layout(
    xaxis = dict(ticks='', nticks=N),
    yaxis = dict(ticks='', nticks=N))

fig = go.Figure(data=data, layout=layout)
iplot(fig)

我有以下问题:

Seaborn:如何将 y 轴标签更改为 YYYY-MM? Plotly:如何将旧数据置于顶部(如 Seaborn) Plotly:如何获取热图中显示的数据标签(就像 Seaborn 一样)。 Plotly:我注意到渲染比 Seaborn 慢得多。是否可以优化,如果可以,如何优化?

【问题讨论】:

SO 更多地是围绕每个帖子一个问题的模型设计的。您的第一个问题已经回答了很多次(在 matplotlib 标签下),第二个问题直接在 Plotly 的 Axes 文档中的“Reversed Axes”标题下回答 【参考方案1】:

2.如何将旧数据置顶?

fig.update_yaxes(autorange="reversed")

3.如何获取热图中显示的数据标签?

ff.create_annotated_heatmap()

4.情节可以优化吗?

这里没有快速修复。

剧情:

情节:

from plotly.offline import iplot
import plotly.graph_objs as go
import plotly.figure_factory as ff

#py.init_notebook_mode(connected=True)

data = [
    go.Heatmap(
        z=df.values,
        x=df.columns.tolist(),
        y=df.index.tolist()
    )
]

font_colors = ['white', 'black']
fig = ff.create_annotated_heatmap(z=df.values, colorscale='Jet', font_colors=font_colors)

fig.update_layout( yaxis = dict(ticks='', nticks=N))

# Make text size smaller
for i in range(len(fig.layout.annotations)):
    fig.layout.annotations[i].font.size = 8

# reverse scales
fig.update_yaxes(autorange="reversed")

fig.show()

【讨论】:

以上是关于样式化 Seaborn 和 Plotly 热图的主要内容,如果未能解决你的问题,请参考以下文章

Plotly 中的相关热图

Plotly Express 热图无法正常工作

具有相同单元大小的 Seaborn 相关热图

如何修复 matplotlib 和 seaborn 热图?

Seaborn 热图:在绘图顶部移动颜色条

Seaborn 热图未显示所有 xticks 和 yticks