我在闪亮的应用中添加复选框时遇到问题。我希望能够检查添加线性回归线,黄土或根本没有。这是使用钻石数据。 任何帮助将不胜感激:
ui.R
library(shiny)
shinyUI(fluidPage(
fluidRow(
sidebarLayout(
sidebarPanel(
numericInput("size","Size",value=1,min=0,max=1,step=0.1),
sliderInput("opaqueness","Opaqueness",0,min=0,max=1),
checkboxInput("color","Color",value=T),
checkboxGroupInput("lines","Lines",choices=c("lm","loess"))
#add inputs
),
mainPanel(
plotOutput("diamondgraph")
)
)
)
))
server.R
library(dplyr)
library(ggplot2)
library(shiny)
data<-diamonds
data<-filter(data,color=="E"|color=="I"|color=="J")
shinyServer(function(input, output) {
output$diamondgraph<-renderPlot({
g<-ggplot(data=data,aes(x=carat,y=price))
if (input$color){
gcol<-g+geom_point(aes(color=color),alpha=input$opaqueness,size=input$size)+scale_x_log10()+
ggtitle("Scatterplot of Carat vs Price")
}else{
gcol<-g+geom_point(alpha=input$opaqueness, size=input$size)+
geom_smooth()+
scale_x_log10()+
ggtitle("Scatterplot of Carat vs Price")
}
if (input$lines =="lm"){
gcol<-g+geom_point(aes(color=color),alpha=input$opaqueness,size=input$size)+geom_smooth(aes(color=color, method=lm))+scale_x_log10()+
ggtitle("Scatterplot of Carat vs Price")
}
if
(input$lines == "loess"){
gcol<-g+geom_point(aes(color=color),alpha=input$opaqueness,size=input$size)+geom_smooth(aes(color=color)) + scale_x_log10()+
ggtitle("Scatterplot of Carat vs Price")
} else
gcol<-g+geom_point(aes(color=color),alpha=input$opaqueness,size=input$size) + scale_x_log10()+
ggtitle("Scatterplot of Carat vs Price")
gcol
})
})
答案 0 :(得分:1)
要确定问题并不容易,因为你有很多代码重复,并且你的格式很难解析。如果您正在使用RStudio Ctrl + I
并且Ctrl + Shift + A
将重新缩进您的行并重新格式化您的代码。以下是我注意到的一些问题:
input$color
设置,因为检查input$lines
值的其他逻辑只是用aes(color=color)
覆盖它。当您分解出大量重复代码时,这更容易看到。 checkboxGroupInput("lines","Lines",choices=c("lm","loess"))
应该是radioButton
。这两件事同时成立是没有意义的。 input$opaqueness
设置为初始值大于零。 以下版本对我来说运行正常:
library(dplyr)
library(ggplot2)
library(shiny)
data <- diamonds
data <- filter(data, color == "E" | color == "I" | color == "J")
set.seed(123)
data <- data[sample(seq_len(nrow(data)), 3000),]
shinyApp(
ui = fluidPage(fluidRow(
sidebarLayout(
sidebarPanel(
numericInput(
"size", "Size",
value = 1,
min = 0,
max = 1,
step = 0.1
),
sliderInput(
"opaqueness", "Opaqueness",
min = 0, max = 1, value = 0.5
),
checkboxInput(
"color", "Color",
value = TRUE
),
radioButtons(
"lines", "Lines",
choices = c("lm", "loess", "none"),
selected = "none"
)
),
mainPanel(plotOutput("diamondgraph"))
)
)),
server = function(input, output) {
output$diamondgraph <- renderPlot({
g <- ggplot(data = data, aes(x = carat, y = price))
if (input$color) {
g <- g + geom_point(
aes(color = color),
alpha = input$opaqueness,
size = input$size)
if (input$lines != "none") {
g <- g + geom_smooth(
aes(color = color),
method = input$lines)
}
} else {
g <- g + geom_point(alpha = input$opaqueness,
size = input$size)
if (input$lines != "none") {
g <- g + geom_smooth(method = input$lines)
}
}
g + scale_x_log10() +
ggtitle("Scatterplot of Carat vs Price")
})
}
)