R + ggplot:热图。如果value ='X',则为特定颜色

时间:2014-05-27 01:04:34

标签: r ggplot2 heatmap

我正在使用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 个答案:

答案 0 :(得分:3)

我不会说你在“数字”中混有“无”。那些被读入的因素是什么?您可能希望将“无”值设置为NA,这是R的特殊缺失值。您可以在read.table期间设置na.strings=c("","None")

但最后似乎scale_fill_gradient2函数有一个na.value =参数。因此,如果您将值转换为真值NA,则可以为它们设置颜色,就像您为highmid等所做的那样。

示例:

#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)
)

sample plot