我正在尝试使用包含多个因素的大型数据集创建热图。我想首先通过绘制所有数值和所有因素的热图来获得鸟瞰图。那么,我想通过各种因素对热图图进行子集 - 但是ggplot2::geom_tile
重新计算热图,以便根据我所采用的任何因素绘制相对丰度。
library(reshape2)
library(ggplot2)
library(dplyr)
#Test data
df <- data.frame(
Measurement = c(1:30),
CA = rep(rnorm(30, mean=20, sd=5)),
TX = rep(rnorm(30, mean=18, sd=5)),
NY = rep(rnorm(30, mean=34, sd=2))
)
df.melt <- melt(df,id = c("Measurement"))
基本热图绘图代码。我的实际数据包括几个因素/列,我想从中提取数据进行各种比较。
#Basic plot
ggplot(data = df.melt,
aes(x = variable, y = Measurement, colors = value, fill = value)) +
geom_tile(color = "black") +
scale_fill_gradientn(colors = c("lightyellow", "darkred"))
我希望输出颜色与测量的相对丰度相对应。所以我可以看看CA,TX和NY的相对变化。这将是我的“基础情节”。
df.melt.reabun <- df.melt %>% group_by(Measurement) %>%
mutate(RelAbun = value/sum(value))
df.melt.reabun <- as.data.frame(df.melt.reabun)
#New plot with relative abundance
ggplot(data = df.melt.reabun,
aes(x = variable, y = Measurement, colors = RelAbun, fill = RelAbun)) +
geom_tile(color = "black") +
scale_fill_gradientn(colors = c("lightyellow", "darkred"))
我还想做的是能够重新绘制我想要的和相对丰富度以在ggplot tile中自动计算。
#Assign plot object
heat <- ggplot(data = df.melt.reabun,
aes(x = variable, y = Measurement, colors = RelAbun, fill = RelAbun)) +
geom_tile(color = "black")+
scale_fill_gradientn(colors = c("lightyellow", "darkred"))
#Select variable to subset data
alt <- c("CA", "TX")
#Subset ggplot object
heat %+% subset(df.melt.reabun, variable %in% alt)
我希望每次将df子集化以在此步骤中绘制时重新计算相对丰度:heat %+% subset()
我有一种感觉,我可以顺利地将group_by
和geom_tile
结合起来自动执行此操作..但我无法弄明白。任何帮助,将不胜感激。我有很多我想看的热图组合,我不想每次“手动”重新计算相对丰度。