使用自定义预定义颜色的热图(d3heatmap?)
Heatmap using custom predefined colours (d3heatmap?)
我有兴趣以热图形式呈现医院指标。我正在使用闪亮的,所以我喜欢交互式 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")
(截图)
当我将鼠标悬停在它上面时,我得到了我感兴趣的指标的实际分数。但是,着色现在基于指标的实际分数,而不是基于我的数据框中的颜色。
如何使用示例数据框中的颜色,同时保留将鼠标悬停在图上时可视化指标值的选项?
您可以简单地使用数字对颜色进行编码,然后使用 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"))
谢谢 HubertL!我将其展开以获得确切答案:
# 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])
补充问题:有人知道当(在我的例子中)指标名称很长时如何扩大边距吗???
我有兴趣以热图形式呈现医院指标。我正在使用闪亮的,所以我喜欢交互式 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")
(截图)
如何使用示例数据框中的颜色,同时保留将鼠标悬停在图上时可视化指标值的选项?
您可以简单地使用数字对颜色进行编码,然后使用 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"))
谢谢 HubertL!我将其展开以获得确切答案:
# 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])
补充问题:有人知道当(在我的例子中)指标名称很长时如何扩大边距吗???