Создайте несколько графиков на основе флажков, нажатых в Shiny

-4

Я пытаюсь сделать блестящее приложение.

Я хочу, чтобы мое приложение создавало несколько графиков на основе числа щелчков. Iris - это dataframe, который имеет различные количественные переменные, и я пытаюсь динамически генерировать графики плотности из 4 переменных, которые находятся в радужной оболочке. Ниже мой сервер и страница ui до сих пор.

library(shiny)
library(ggplot2)
library(tidyverse)

df<-iris[,colnames(iris)!="Species"]

ui<-fluidPage(

titlePanel("Density Plots of Quantitative Variables"),
sidebarLayout( sidebarPanel( sliderInput("bw","Slide to change bandwidth
of Plot",min=0.1,max=20,value=3,step=0.1,animate=TRUE),

checkboxGroupInput("variableinp","Choose variables",
choices=colnames(df),selected = colnames(df)[1]),verbatimTextOutput("value")
),
mainPanel( plotOutput("densityplot"))
)
)

server<-function(input,output){

# observeEvent(input$variableinp, {
# print((input$variableinp))
# })

output$densityplot <- renderPlot({

if(!is.null(input$variableinp)) {

getoutandquant <- function(x) {
q1<-quantile(x)[[2]]
q3<-quantile(x)[[4]]
IQR<-q3-q1

out1<-q3+(1.5)*IQR
out2<-q1-(1.5)*IQR

#Finding the list of points which are outliers for a particular
variable.
out<-x[x>out1]
out2<-x[x<out2]
outliers<-tibble(x=c(out,out2),y=0)

return(outliers)
}
nplot<-length(input$variableinp)
x<-input$variableinp

for ( i in 1:nplot) {
outlier<-getoutandquant(df[,x[i]])

}

p1<-ggplot(df,aes_string(input$variableinp[i]))+
stat_density(geom="line",adjust=input$bw)+ ylab("Density\n")
p1+geom_point(data=outlier,aes(x,y),shape=23)
}
})
}

shinyApp(ui=ui,server=server)

Ниже приведен мой вывод. Как видно, генерируется только один сюжет. С проверенными двумя флажками я бы хотел 2 участка, с 3-мя галочками 3 и т.д. :

Density Plots of variables

Может ли кто-нибудь дать мне подсказки или привести к тому, как я должен это делать. Мои сюжеты порождают хорошее. Мне просто нужно, чтобы несколько графиков создавались на основе количества щелчков.

спросил(а) 2018-09-15T12:40:00+03:00 2 года назад
0
89

Попытайтесь сохранить выход ggplot в списке, а затем используйте do.call и grid.arrange чтобы объединить все это в один сюжет:

Попробуйте следующий код: он должен работать отлично: вам необходимо установить пакет gridExtra для объединения нескольких ggplot.

library(shiny)
library(ggplot2)
library(tidyverse)
library(gridExtra)

df<-iris[,colnames(iris)!="Species"]

ui<-fluidPage(

titlePanel("Density Plots of Quantitative Variables"),
sidebarLayout( sidebarPanel( sliderInput("bw","Slide to change bandwidth
of Plot",min=0.1,max=20,value=3,step=0.1,animate=TRUE),

checkboxGroupInput("variableinp","Choose variables",
choices=colnames(df),selected = colnames(df)[1]),verbatimTextOutput("value")
),
mainPanel( plotOutput("densityplot"))
)
)

server<-function(input,output){

# observeEvent(input$variableinp, {
# print((input$variableinp))
# })

output$densityplot <- renderPlot({

if(!is.null(input$variableinp)) {

getoutandquant <- function(x) {
q1<-quantile(x)[[2]]
q3<-quantile(x)[[4]]
IQR<-q3-q1

out1<-q3+(1.5)*IQR
out2<-q1-(1.5)*IQR

#Finding the list of points which are outliers for a particular
out<-x[x>out1]
out2<-x[x<out2]
outliers<-tibble(x=c(out,out2),y=0)

return(outliers)
}
nplot<-length(input$variableinp)
x<-input$variableinp

p<-list()
for ( i in 1:nplot) {
outlier<-getoutandquant(df[,x[i]])
p[[i]]<-ggplot(df,aes_string(input$variableinp[i]))+
stat_density(geom="line",adjust=input$bw)+ ylab("Density\n")+
geom_point(data=outlier,aes(x,y),shape=23)
}
do.call(grid.arrange,p)
}
})
}

shinyApp(ui=ui,server=server)

Также, пожалуйста, выберите этот пост как лучший ответ, если он решит вашу проблему, благодаря миллиону.

ответил(а) 2018-09-15T20:08:00+03:00 2 года назад
Ваш ответ
Введите минимум 50 символов
Чтобы , пожалуйста,
Выберите тему жалобы:

Другая проблема