【问题标题】:Heatmap using custom predefined colours (d3heatmap?)使用自定义预定义颜色的热图(d3heatmap?)
【发布时间】:2017-02-16 23:34:02
【问题描述】:

我有兴趣以热图样式呈现医院指标。我使用的是闪亮的,所以我喜欢交互式 d3heatmap()-plots 的外观和感觉(但我愿意接受其他选择)。

例如,假设我有 4 家医院和 5 个指标。我想绘制每个医院在每个指标上的得分,但是,着色不应取决于指标的实际值,而应取决于单独进行的统计测试(80% 的值可能表示 4/5,但也可能表示 800/ 1000,这在估计的精度方面有很大的不同),它有以下分组:

  • 高于平均水平
  • 与平均值没有差异
  • 低于平均水平

示例数据(注意实际数字没有意义):

df <- data.frame(Hospital=rep(LETTERS[10:13], each=5), 
                 Indicator=rep(LETTERS[1:5], 4), 
                 Value=sample(1:10, 20, replace=T), 
                 Conclusion=sample(c("above", "not different", "below"), 20, replace=T))
df$colour[df$Conclusion == "above"] <- "green"
df$colour[df$Conclusion == "not different"] <- "grey"
df$colour[df$Conclusion == "below"] <- "red"
df

做一个d3heatmap 我明白了:

d1 <- dcast(df, Hospital ~ Indicator, value.var = "Value")
row.names(d1) <- paste0("hosp",d1[[1]])
d3heatmap(d1[-1], dendrogram = "none")

(截图) 当我将鼠标悬停在它上面时,我得到了我感兴趣的指标的实际分数。但是,着色现在基于指标的实际分数,而不是基于我的数据框中的颜色。

如何使用示例数据框中的颜色,同时保留将鼠标悬停在绘图上时可视化指标值的选项?

【问题讨论】:

    标签: r shiny d3heatmap


    【解决方案1】:

    您可以简单地使用数字编码颜色,然后使用 colors 参数传递颜色进行解码:

    df$colour[df$Conclusion == "above"] <- 1         #green
    df$colour[df$Conclusion == "not different"] <- 2 #grey
    df$colour[df$Conclusion == "below"] <- 3         #red
    
    d1 <- dcast(df, Hospital ~ Indicator, value.var = "colour")
    
    d3heatmap(d1[-1], dendrogram = "none", colors=c("green", "grey","red"))
    

    【讨论】:

    • 解决了颜色问题!那太棒了。但是有没有办法保持指标的实际值 (df$Value) 以便在将鼠标悬停在它上面时显示?
    • 我刚刚看到了cellnote的使用......!您可以参考不同的矩阵来获取实际值!所以沿着:d3heatmap(d2[-1], dendrogram = "none", colors=c("blue", "grey","re​​d"), cellnote = d1[-1])。我会在我的编辑中添加这个
    【解决方案2】:

    感谢休伯特!我扩展它以获得确切的答案:

    # Cast to get the matric with the values to display when hovering
    d1 <- dcast(df, Hospital ~ Indicator, value.var = "Value")
    row.names(d1) <- paste0("hosp",d1[[1]])
    
    
    # Cast to get the matrix with the colours to display
    df$colour[df$Conclusion == "above"] <- 1         #green
    df$colour[df$Conclusion == "not different"] <- 2 #grey
    df$colour[df$Conclusion == "below"] <- 3         #red
    df$colour <- as.numeric(df$colour)
    d2 <- dcast(df, Hospital ~ Indicator, value.var = "colour")
    
    
    # Plot heatmap using colours, and refer to the value-matrix in the 'cellnote'
    d3heatmap(d2[-1], dendrogram = "none", colors=c("blue", "grey","red"), cellnote = d1[-1])
    

    附加问题:当(在我的情况下)指标名称很长时,有人知道如何扩大边距吗???

    【讨论】:

      猜你喜欢
      • 2020-10-21
      • 1970-01-01
      • 1970-01-01
      • 2015-02-19
      • 2021-07-06
      • 2020-06-21
      • 2017-07-20
      • 2015-09-05
      • 1970-01-01
      相关资源
      最近更新 更多