如何在Plotly Express(px.imshow)热力图中隐藏重复值?
在Plotly Express中隐藏热力图的重复值
要实现类似Seaborn中mask的效果,隐藏对称矩阵的重复值,可以通过手动生成文本矩阵并替换指定位置内容为空字符串,再传递给热力图的text属性来实现,具体步骤如下:
- 生成对称矩阵的mask:比如要隐藏上三角(不含对角线)或下三角,用numpy创建布尔矩阵
- 基于mask构建文本矩阵:将mask对应的位置的值替换为空字符串
- 更新Plotly热力图的text属性,替换默认的text_auto生成的文本
以下是修改后的可运行代码:
import pandas as pd import plotly.express as px import numpy as np heatmap_data = pd.DataFrame( {'user1': {'user1': 1, 'user2': 0.5267109866774764, 'user3': 0.905914413030722}, 'user2': {'user1': 0.5267109866774764, 'user2': 1, 'user3': 0.5160264783692895}, 'user3': {'user1': 0.905914413030722, 'user2': 0.5160264783692895, 'user3': 1} }) # 创建mask:隐藏上三角(不含对角线),如需隐藏下三角改用np.tril mask = np.triu(np.ones_like(heatmap_data, dtype=bool), k=1) # 构建文本矩阵,mask位置设为空字符串 text_matrix = heatmap_data.astype(str) text_matrix[mask] = "" fig = px.imshow(heatmap_data, zmin=0, zmax=1, color_continuous_scale="Plasma") # 更新trace的text和texttemplate,实现自定义文本显示 fig.update_traces(text=text_matrix.values, texttemplate="%{text}", textfont={"size":12}) fig.show()
关键说明
np.triu用于生成上三角的mask,k=1表示排除对角线;如果需要隐藏下三角,改用np.tril并设置对应k值- 手动构建text_matrix时,将需要隐藏的位置设为空字符串,这样热力图对应位置就不会显示文本
- 关闭px.imshow的
text_auto,转而用update_traces设置text属性,实现精准控制文本显示
内容的提问来源于stack exchange,提问作者Leonardo Ferreira
相关产品推荐
相关产品推荐

