В дополнение к тому, что указал @Parfait, не очень хорошая идея вызывать объекты globalenv.
Ваша оригинальная функция не работает, потому что 1. она принимает строку, а вы передаете ее в aes вggplot2, 2. когда вы задаете подмножество 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 ))
}
объединение графиков
x=c("x13","y13")
p2=lapply(x,function(i)barplotseries(i,countmatrix))
do.call("grid.arrange", c(p2, ncol=2))
![enter image description here](https://i.stack.imgur.com/gYjdE.png)
Вы также можете выполнять другие типы поднабора, например столбец 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 ))
}