关于 ggplot2:R ggplot: 热图。如果值 = \\’X\\’,则为特定颜色 | 珊瑚贝

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” 值设置为 NA,这是 R\\ 的特殊缺失值。您可以通过设置 na.strings=c(“”,”None”).

在 read.table 期间执行此操作

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

示例:

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

sample

  • 感谢您的回复。我可以将 \\’None\\’ 替换为 \\’NA\\’ 或 NA 或 R 最好处理的任何内容。我已经尝试了这两种方法并尝试使用不同的调色板在 scale_fill_gradient2 中实现 na.value 选项,但它不起作用。我没有收到任何错误,但对应于 NA 值的图块没有什么不同。此外,比例从 0>1 上升到 0>25,所以看起来 NA 值是作为数值读入的?
  • @user1995839 我添加了示例数据和代码来制作绘图。也许您可以编辑原始问题以包含 str(data_shaped) 的结果,以便我们了解您的数据结构。您要确保数值是数字。
  • 非常感谢您花时间提供帮助。你是个传奇!! ^_^


来源:https://www.codenong.com/23879639/

微信公众号
手机浏览(小程序)
0
分享到:
没有账号? 忘记密码?