R ggplot2:使用geom_tile中的二进制数据统一分组样本的填充
我试图用R中的geom_瓷砖显示缺席/在场热图。如果这里有一个功能,我想填充1或在场:在一组中至少一个样本中可以找到OTU。下面是示例代码,我按站点对示例进行了分组:R ggplot2:使用geom_tile中的二进制数据统一分组样本的填充,r,ggplot2,R,Ggplot2,我试图用R中的geom_瓷砖显示缺席/在场热图。如果这里有一个功能,我想填充1或在场:在一组中至少一个样本中可以找到OTU。下面是示例代码,我按站点对示例进行了分组: library(reshape2) library(ggplot2) df <- data.frame( OTU = c("OTU001", "OTU002", "OTU003", "OTU004", "OTU005"), Sample1 = c(0,0,1,1,0), Sample2 = c(1,0,0,1,
library(reshape2)
library(ggplot2)
df <- data.frame(
OTU = c("OTU001", "OTU002", "OTU003", "OTU004", "OTU005"),
Sample1 = c(0,0,1,1,0),
Sample2 = c(1,0,0,1,0),
Sample3 = c(1,1,0,1,0),
Sample4 = c(1,1,1,1,0))
molten_df <- melt(df)
# add group data
sites <- data.frame(
site = c(rep("site_A", 10), rep("site_B", 10)))
molten_df2 <- cbind(molten_df, sites)
# plot heatmap based on group variable sites
ggplot(molten_df2, aes(x = site, y = OTU, fill = value)) +
geom_tile()
平铺场地_A,OTU003由值Sample1=1和Sample2=0组成,结果为0。另一方面,瓷砖场地_B,OTU003也有Sample3=0和Sample4=1,但结果是1。也许它使用最后一个值来填充?如果OTU出现在任何分组样本中,无论顺序如何,我都想显示1,我想知道是否有人知道如何在ggplot2中执行此操作
我想到但编码失败的另一种方法是编写一个函数,如果至少出现一个1,则将给定磁贴的剩余值设置为1。使用库dplyr,您可以创建一个新变量,指示给定站点的OTU是否存在于至少一个示例中:
tmp = group_by(molten_df2,OTU, site) %>%
summarise(., PA=as.factor(ifelse(sum(value)>0,1,0)))
然后绘制:
ggplot(tmp, aes(x = site, y = OTU, fill = PA)) +
geom_tile()
或直接在ggplot函数内:
ggplot(group_by(molten_df2,OTU, site) %>%
summarise(., PA=factor(ifelse(sum(value)>0,1,0))),
aes(x = site, y = OTU, fill =PA)) +
geom_tile()
谢谢,效果很好。你知道geom_tile电话中描述的行为是如何引起的吗?欢迎!对于每个平铺,都会绘制所有值,但它们会叠加在第一个、第二个。。。直到最后一个。因此,您只能看到与最后一个值关联的颜色。完美,现在它有意义了!