为啥用 Plotly 显示热图时会出现这个问题?

Posted

技术标签:

【中文标题】为啥用 Plotly 显示热图时会出现这个问题?【英文标题】:Why this problem when showing the heatmap with Plotly?为什么用 Plotly 显示热图时会出现这个问题? 【发布时间】:2020-10-20 13:43:39 【问题描述】:

我想用 plotly 创建一个简单的带注释的热图。 但是当 y 值包含年份('2017','2018','2019')时,我会感到奇怪

例如:

import plotly.figure_factory as ff

# create a x list (month)
x = ['January',
     'February',
     'March']

#create a y list (year)
y=['2017', '2018', '2019', 'Mean']

#create a z list (the values)
z = [[1,2,3],
    [4,5,6],
    [7,8,9],
    [4,5,6]]

fig = ff.create_annotated_heatmap(z,x=x,y=y)
fig.show()

上面的这段代码给了我这个结果:

但是,如果我用其他字符串更改 y 列表。我没事,我得到了我想要的。

import plotly.figure_factory as ff

# create a x list (month)
x = ['January',
     'February',
     'March']

#create a y list (year)
y=['year 1', 'year 2', 'year 3', 'Mean']

#create a z list (the values)
z = [[1,2,3],
    [4,5,6],
    [7,8,9],
    [4,5,6]]

fig = ff.create_annotated_heatmap(z,x=x,y=y)
fig.show()

我该如何解决这个问题?

【问题讨论】:

【参考方案1】:

尝试添加fig.update_layout(yaxis=dict(type='category'))。这应该确保 y 轴上的值被解释为字符串。

import plotly.figure_factory as ff

# create a x list (month)
x = ['January',
     'February',
     'March']

#create a y list (year)
y=['2017', '2018', '2019', 'Mean']

#create a z list (the values)
z = [[1,2,3],
    [4,5,6],
    [7,8,9],
    [4,5,6]]

fig = ff.create_annotated_heatmap(z,x=x,y=y)

fig.update_layout(yaxis=dict(type='category'))

fig.show()

【讨论】:

我得到与 OP 示例代码相同的损坏结果。有趣的是,fig.update_layout(yaxis=dict(type='category'))fig.update_yaxes(type='category') 在我的情况下都没有解决这个问题。相反,不再绘制所有彩色框。你用的是什么 Plotly 版本? (在 Python 3.7.6 上使用 Plotly 4.12.0 和 Plotly 5.1.0 测试) 我不记得我当时使用的是哪个版本的 Plotly,但我刚刚重新运行了代码(我有 Plotly 5.3.1),确实它不再工作了。跨度>

以上是关于为啥用 Plotly 显示热图时会出现这个问题?的主要内容,如果未能解决你的问题,请参考以下文章

Plotly Express 热图无法正常工作

Python & Plotly:将悬停数据添加到密度热图

两个或多个热图的 Python Plotly 悬停信息

Plotly:如何在带注释的热图中舍入显示文本但在悬停时保持完整格式?

如何使用 Unstack 数据可视化 Plotly 热图

Plotly:热图颜色图例我的子图