R+;ggplot:热图。如果值=',则为特定颜色;X';
我正在用ggplot和RColorBrewer在R中制作一些热图。我正在绘制一系列整数值,但其中一些数值为“无”,我想给它们涂上特定的颜色。有人能告诉我如何修改我的代码以添加此功能,包括添加第二个显示“新颜色标签”“无”的图例吗?我对R很陌生,所以没有太多的运气独自完成这个 非常感谢!!:) 示例数据R+;ggplot:热图。如果值=',则为特定颜色;X';,r,ggplot2,heatmap,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_re
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")
库(ggplot2)
图书馆(RColorBrewer)
数据我不确定其中的“无”是如何与数值混合在一起的。这些是否被解读为因素?您可能希望将“None”值设置为NA
,这是R的特殊缺失值。您可以通过设置na.strings=c(“,”None”)
在读取.table
期间执行此操作
但最后,似乎scale\u fill\u gradient2
函数有一个na.value=
参数。因此,如果您将值转换为trueNA
值,那么您可以为它们设置颜色,就像为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
谢谢您的回复。我可以用“NA”或“NA”来代替“None”,或者由R来处理的任何事情。我尝试了这两种方法,并尝试使用不同颜色的托盘在scale_fill_gradient2中实现na.value选项,但它不起作用。我没有得到任何错误,但是与NA值对应的分片没有什么不同。此外,刻度从0>1上升到0>25,所以看起来NA值是作为数值读入的?@user1995839我添加了样本数据和代码来绘制图。也许您可以编辑原始问题,将str(data_-shaped)
的结果包括在内,以便我们了解您的数据结构。您需要确保数值是数值。非常感谢您花时间提供帮助。你是一个传奇^_^
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)
)