R+ggplot: Heatmap. Specific color if value = 'X'
我正在使用 ggplot 和 RColorBrewer 在 R 中制作一些热图。我正在绘制一系列整数值,但其中一些值是"无",我想将这些值着色为特定颜色。有人可以就修改我的代码以添加此功能的最合适方法提出建议,包括添加显示"新颜色标签"无"的第二个图例?我对 R 很陌生,所以没有太多运气靠自己搞定这个。
非常感谢!! :)
示例数据
1 2 3 | Target A.tg_t0_rep_A B.tg_t0_rep_B C.tg_t0_rep_C D.tg_t0_rep_D E.tg_w2_rep_A F.tg_w2_rep_B G.tg_w2_rep_C H.tg_w2_rep_D I.tg_w4_rep_A J.tg_w4_rep_B 1 : 12110501 None 0.5625 0.25 0.5714 None None 0.5 None None 0.2857 1 : 27262099 0.3333 0.8889 0.6667 0.9231 None None 0.5556 0.6667 None 0.375 |
情节代码
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 | library(ggplot2) library(RColorBrewer) data <- read.csv('test.csv', header =TRUE) rownames(data)=data[,1] data_shaped <- data.frame(sample = rep(colnames(data), each = nrow(data)), dmr = rownames(data), methylation_level = unlist(data)) # remove first n rows from dataset(first col header mistakenly being analysed) data_shaped <- data_shaped[-c(1:2), ] # set colour palette jBuPuFun <- colorRampPalette(brewer.pal(n = 9,"RdBu")) paletteSize <- 256 jBuPuPalette <- jBuPuFun(paletteSize) # heatmap! ggplot(data_shaped, aes(x = sample, y = dmr, fill = methylation_level)) + theme(axis.text.x = element_text(angle = 90, hjust = 1, vjust = 0.5)) + geom_tile() + scale_fill_gradient2(high = jBuPuPalette[1], mid = jBuPuPalette[paletteSize/2], low = jBuPuPalette[paletteSize], midpoint = (max(data_shaped$methylation_level) + min(data_shaped$methylation_level)) / 2, name ="methylation_level") |
我不确定您是如何将"无"与数值混合在一起的。那些被读入的因素?您可能希望将 "None" 值设置为
在
但最后似乎
示例:
1 2 3 4 5 6 | #sample data with missing values dd<-data.frame( expand.grid(x=1:10, y=1:10), value=rpois(10*10, 10) ) dd$value[c(5,10,55,77)] <- NA |
现在做一个情节
1 2 3 4 5 | ggplot(dd, aes(x=x, y=y, fill=value)) + geom_tile() + scale_fill_gradient2(high="red",mid="white",low="blue", na.value="yellow", midpoint=mean(dd$value, na.rm=T) ) |