我正在使用ggplot和使用RColorBrewer在R中制作一些热图 . 我有一系列整数值,我正在绘制,但有些值是'无',我想为这些特定的颜色着色 . 有人可以建议最合适的方式来修改我的代码以添加此功能,包括添加第二个图例,显示“新颜色标签”无'?我对R很陌生,所以没有太多运气可以让我自己解决这个问题 .
非常感谢!! :)
示例数据
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
情节代码
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")
1 回答
我不会引用你如何将"None"与数值混合 . 那些被读入的因素是什么?您可能希望将"None"值设置为
NA
,这是R的特殊缺失值 . 您可以通过设置na.strings=c("","None")
在read.table
期间执行此操作 .但最后看起来
scale_fill_gradient2
函数有一个na.value =
参数 . 因此,如果将值转换为trueNA
值,则可以为它们设置颜色,就像对high
和mid
等一样 .例:
现在做一个情节