Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/r/80.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/css/36.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/matlab/15.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
R ggplot2:使用geom_tile中的二进制数据统一分组样本的填充_R_Ggplot2 - Fatal编程技术网

R ggplot2:使用geom_tile中的二进制数据统一分组样本的填充

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,

我试图用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,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电话中描述的行为是如何引起的吗?欢迎!对于每个平铺,都会绘制所有值,但它们会叠加在第一个、第二个。。。直到最后一个。因此,您只能看到与最后一个值关联的颜色。完美,现在它有意义了!