Подмножество ggplot в цикле - PullRequest
0 голосов
/ 29 октября 2019

вот проблема, с которой я столкнулся с ggplot + lapply + проблема поднаборапо многим переменным это, кажется, не работает (часть поднабора, по крайней мере, кажется, не работает. Вот код, который я использовал.

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))

enter image description here все, что нужно, это иметь возможностьчтобы сделать один и тот же график выше для максимально возможного количества переменных.

пожалуйста, дайте мне знать ваши предложения (я должен использовать For?) Я не знаю, как его использовать.

спасибо

1 Ответ

1 голос
/ 31 октября 2019

В дополнение к тому, что указал @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

Вы также можете выполнять другие типы поднабора, например столбец 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 ))
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...