R ggplot子集时使用geom瓷砖自动重新计算

R ggplot子集时使用geom瓷砖自动重新计算,r,ggplot2,dplyr,R,Ggplot2,Dplyr,我试图用一个包含多个因素的大型数据集创建热图。我想先通过绘制所有数值和所有因素的热图,获得鸟瞰图。然后,我想用各种因素对热图图进行子集划分-但是让ggplot2::geom_tile重新计算热图,以便它根据我所二次采样的任何因素绘制相对丰度 library(reshape2) library(ggplot2) library(dplyr) #Test data df <- data.frame( Measurement = c(1:30), CA = rep(rnorm(30

我试图用一个包含多个因素的大型数据集创建热图。我想先通过绘制所有数值和所有因素的热图,获得鸟瞰图。然后,我想用各种因素对热图图进行子集划分-但是让
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"))
我希望输出颜色通过测量与相对丰度相对应。因此,我可以查看CA、TX和NY之间的相对变化。这将是我的“基本情节”

df.melt.reabun%组由(测量)%>%
变异(RelAbun=值/和(值))

df.melt.reabun通常建议在将数据帧传递给ggplot之前进行数据争用。在这种情况下,类似以下内容可能会起作用:

subsetFun <- function(df, var.filter){
  return(df %>% 
           filter(variable %in% var.filter) %>%
           group_by(Measurement) %>%
           mutate(RelAbun = value / sum(value)) %>%
           ungroup())
}

heat %+% subsetFun(df.melt.reabun, alt)
subsetFun%
筛选器(变量%in%var.filter)%%>%
组别(测量)%>%
变异(RelAbun=value/sum(value))%>%
解组()
}
加热%+%subsetFun(df.melt.reabun,alt)

谢谢!我将致力于调整代码,使处理工作领先于绘图工作。那更好。总是在寻找简化代码的方法。
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"))
#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)
subsetFun <- function(df, var.filter){
  return(df %>% 
           filter(variable %in% var.filter) %>%
           group_by(Measurement) %>%
           mutate(RelAbun = value / sum(value)) %>%
           ungroup())
}

heat %+% subsetFun(df.melt.reabun, alt)