Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/r/75.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/2/unit-testing/4.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 循环中的ggplot子集集_R_Ggplot2_Subset_Lapply - Fatal编程技术网

R 循环中的ggplot子集集

R 循环中的ggplot子集集,r,ggplot2,subset,lapply,R,Ggplot2,Subset,Lapply,这里有一个关于ggplot+lappy+子集问题的问题 这里有一个可复制的例子 stages=as.vector(c("1","2","3","1","1","1","1","1","1","2","2","2","2","2","3","3","3","3","3","3","3","3","3","3","3","1","1")) x13=c(0.9, 0, 0, 0.692, 0,0,0,0,0,0,0,0,0,0.53, 0.5,0,2,3,55,49,64,9,4,1,0,54,0)

这里有一个关于ggplot+lappy+子集问题的问题

这里有一个可复制的例子

stages=as.vector(c("1","2","3","1","1","1","1","1","1","2","2","2","2","2","3","3","3","3","3","3","3","3","3","3","3","1","1"))
x13=c(0.9, 0, 0, 0.692, 0,0,0,0,0,0,0,0,0,0.53, 0.5,0,2,3,55,49,64,9,4,1,0,54,0)
y13=c(0.9, 0, 0, 0.692, 0,0,0,0,0,0,0,0,0.53,0.9, 0, 0, 0.692, 0,0,0,0,0,0,0,0,0,0.53)
countmatrix=cbind(x13,stages,y13)
countmatrix=as.data.frame(countmatrix)
p2=ggplot(data=countmatrix, aes(stages, fill = x13))+
  geom_bar(position="stack",  fill="gray34")+
  geom_bar(data=subset(countmatrix, x13!=0),  aes(fill=stages ))
p2 ````
一旦我把它放在函数中,在多个变量上进行复制,它似乎就不起作用了,至少子集部分似乎不起作用。 这是我使用的代码

barplotseries <- function(x){
  y=as.name(x)
  ggplot(data=countmatrix, aes(stages, fill = y))+
    geom_bar(position="stack",  fill="gray34")+
    geom_bar(data=subset(countmatrix,y!=0),  aes(fill=stages ))
}
x=c("x13","y13")
p2=lapply(x, barplotseries)
do.call("grid.arrange", c(p2, ncol=2))
我们想要的是能够在尽可能多的变量上绘制相同的图

请让我知道你的建议,我应该使用?我不知道如何使用它


感谢@Parfait所指出的,称globalenv对象不是一个好主意

您的原始函数无法工作,因为1。它接收一个字符串,然后将其传递到ggplot2,2中的aes中。在countmatrix上创建子集时,将再次传入字符串

进行一些编辑,以下内容应该可以工作:

#keep the data.frame as factors and numeric
stages=as.vector(c("1","2","3","1","1","1","1","1","1","2","2","2","2","2","3","3","3","3","3","3","3","3","3","3","3","1","1"))
x13=c(0.9, 0, 0, 0.692, 0,0,0,0,0,0,0,0,0,0.53, 0.5,0,2,3,55,49,64,9,4,1,0,54,0)
y13=c(0.9, 0, 0, 0.692, 0,0,0,0,0,0,0,0,0.53,0.9, 0, 0, 0.692, 0,0,0,0,0,0,0,0,0,0.53)
countmatrix=data.frame(x13,stages,y13)
您编辑的函数

barplotseries <- function(y,DATA){
  DATA_subset = subset(DATA,DATA[,y]>0)      
  ggplot(data=DATA, aes_string(x="stages", fill = y))+
    geom_bar(position="stack",  fill="gray34")+
    geom_bar(data=DATA_subset,  aes(fill=stages ))
}
您还可以执行其他类型的子集设置,例如y列大于某些截断:

barplotseries <- function(y,DATA){
  DATA_subset = subset(DATA,DATA[,y]>mean(DATA[,y])-1.96*sd(DATA[,y]))
  ggplot(data=DATA, aes_string(x="stages", fill = y))+
    geom_bar(position="stack",  fill="gray34")+
    geom_bar(data=DATA_subset,  aes(fill=stages ))
}

您的可复制示例不包括阶段。请使用变量将绘图保存在函数内部,以便您可以在函数外部访问它。此外,可复制示例不会呈现此类绘图。请确保在空的R环境中重新运行发布的代码,即没有以前的globalenv对象,以确保所有编译和呈现都是相应的。很抱歉,我忘记复制第一行。向量阶段正在进行中。现在可以复制了,嘿,伙计!非常感谢你。它工作完美!!!谢谢!你现在的分组规则是什么?我希望它不太复杂=pI希望通过Z scoore删除底部5%的值数据=subsetDATA,data[,y]>meany-1.96*sdy,但如果我输入data=subsetDATA,data[,y]>0或1或2这样的值,它就不起作用了。它是有效的,但我用了一个公式,它不象y-1.96*sdy,你必须再次调用数据[,y],因为这里的y是一个字符。。所以做一些类似于data=subsetDATA,data[,y]>meansdata[,y]-1.96*sdDATA[,y]
barplotseries <- function(y,DATA){
  DATA_subset = subset(DATA,DATA[,y]>mean(DATA[,y])-1.96*sd(DATA[,y]))
  ggplot(data=DATA, aes_string(x="stages", fill = y))+
    geom_bar(position="stack",  fill="gray34")+
    geom_bar(data=DATA_subset,  aes(fill=stages ))
}