将悬停注释添加到 Heatmap plotly R

Adding hover annotations to a Heatmap plotly R

我目前正在使用 plotly 的热图来制作风险矩阵(如果有人知道更有效的方法,我愿意接受建议)。目前,我使用注释添加了有关不同风险的信息,但我希望它不是注释,而是一个包含鼠标悬停在其上时包含信息的标记,如下图所示。

下面我附上了代码和我想要的图片。

如果有任何建议、建议等,我将不胜感激。谢谢!

df.risk <- data.frame(
  Risk = paste0("R",1:5),
  Prob = runif(5),
  Cons = runif(5,1,5))
  
  m <- c(rep(0.1,4),0.5,rep(0.1,2),rep(0.5,3),0.1,rep(0.5,3),0.9,0.1,rep(0.5,2),rep(0.9,2),rep(0.5,2),rep(0.9,3))
  
  scale <- matrix(m, nrow = 5, ncol = 5)
  
  pal <- c("#1A9641",
           "#EFE90F",
           "#F44336")
  
  fig <- plot_ly(
    x = seq(1,16,by = 4),
    y = seq(0,1,by = 0.2),
    z = scale,
    type = "heatmap",
    colors = colorRamp(pal))
  
  fig <- fig  %>% 
    layout(xaxis = list(title = 'Cons'),
           yaxis = list(title = 'Prob'))
  
fig %>% 
  add_annotations(y = df.risk$Prob,
                  x = df.risk$Cons,
                  text = df.risk$Risk,
                  showarrow = FALSE) %>% hide_colorbar()

如果这就是您要找的,请告诉我。我在df.risk中更改了您的数据,使模板更加明显。除此之外,导致 plot_ly 对象的内容与您在问题中提出的内容保持一致。

数据先变化

df.risk <- data.frame(
  Risk = rep(c("Product rendered obsolete",
                "Strict legal requirements",
                "Sufficient human resources",
                "Sufficient material resources",
                "Sufficient manufacturing equipment",
                "Sufficient sales",
                "Reliable suppliers",
                "Unknown/unintended costs exceeding ROI",
                "Evidence technology will work",
                "Sufficient market share long term"), 3),
  Prob = runif(10),
  Cons = runif(10,1,5)) 

然后初始创建plot_ly对象。

fig <- plot_ly(
  x = seq(1,16,by = 4),
  y = seq(0,1,by = 0.2),
  z = scale,
  hoverinfo = "none",
  type = "heatmap",
  colors = colorRamp(pal)) %>% 
  add_markers(
    inherit = F,
    x = ~Cons, y = ~Prob,
    data = df.risk,
    showlegend = F,
    text = ~Risk,
    color = I("white"), # I("transparent") or whatever color you prefer
    hovertemplate = paste0("%{text}<br><br>", # risks
                           "Probability: %{y:.0%}<br>", # prob % rounded
                           "Severity: %{x:.2f}", # severity, rounded
                           "<extra></extra>")) # no trace info

fig  %>% 
  layout(xaxis = list(title = 'Consequences/Severity'),
         yaxis = list(title = 'Probability')) %>% hide_colorbar()

这是它的样子。