我正在使用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")
答案 0 :(得分:3)
我不会说你在“数字”中混有“无”。那些被读入的因素是什么?您可能希望将“无”值设置为NA
,这是R的特殊缺失值。您可以在read.table
期间设置na.strings=c("","None")
。
但最后似乎scale_fill_gradient2
函数有一个na.value =
参数。因此,如果您将值转换为真值NA
,则可以为它们设置颜色,就像您为high
和mid
等所做的那样。
示例:
#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
现在制作一个情节
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)
)