You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在R语言Plotly热力图中添加单元格数值?

Plotly热力图显示所有单元格数值的解决方法

问题描述

想要在Plotly绘制的热力图中显示每个单元格的数值,但尝试add_annotation或调整layout参数时,数值仅显示在矩阵对角线上,原代码如下:

library(RColorBrewer)
library(plotly)

data <- matrix(data=20, nrow = 10, ncol = 10)
data<- as.data.frame(data)
colnames(data) <- letters[1:10]
rownames(data) <- LETTERS[1:10]

pal <- colorRampPalette(brewer.pal(9, "YlOrRd"))(29)
pal[1] <-c("#FFFFFF")


plot_ly(x = colnames(data), y = rownames(data), z = data, type = "heatmap", colors = pal, height=700, width=700, xgap=10, ygap=10, showscale=TRUE)  

解决方案

问题出在未批量生成所有单元格的标注信息。需要先构造所有单元格的坐标和对应数值文本,再一次性添加到图中。修改后的代码如下:

library(RColorBrewer)
library(plotly)

data <- matrix(data=20, nrow = 10, ncol = 10)
data <- as.data.frame(data)
colnames(data) <- letters[1:10]
rownames(data) <- LETTERS[1:10]

pal <- colorRampPalette(brewer.pal(9, "YlOrRd"))(29)
pal[1] <- "#FFFFFF"

# 构造所有标注的x、y坐标和数值文本
x_vals <- rep(colnames(data), each = nrow(data))
y_vals <- rep(rownames(data), ncol(data))
text_vals <- as.character(as.matrix(data))

# 绘制热力图并批量添加标注
plot_ly(x = colnames(data), y = rownames(data), z = data, 
        type = "heatmap", colors = pal, height=700, width=700, 
        xgap=10, ygap=10, showscale=TRUE) %>%
  add_annotations(
    x = x_vals,
    y = y_vals,
    text = text_vals,
    showarrow = FALSE,
    font = list(color = ifelse(data >= 10, "black", "white")) # 可选:根据背景色调整文字颜色
  )

关键说明

  • x_vals和y_vals通过重复列名、行名,生成每个单元格对应的坐标
  • text_vals将矩阵转为字符向量,对应每个单元格的数值
  • add_annotations一次性添加所有标注,设置showarrow=FALSE去掉箭头干扰
  • 可选添加文字颜色逻辑,根据单元格数值深浅调整文字颜色,提升可读性

内容的提问来源于stack exchange,提问作者Manuel Tiburtini

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.31 17:20:32