r - 从 selectizeInput 中选择多个选项并为 r 中的每个选项绘制多条线
问题描述
我正在研究 r 中的简单折线图。现在我可以在 UI 部分使用两个 selectizeInputs 来选择一个赛季和一个团队,每个 selectizeInput 都有一个在 select 语句中用于服务器部分的 ID,无论如何我想调整代码以便我可以选择多个赛季和多个团队,当发生这种情况时,我想在图表上为每个团队和每个赛季绘制多条线。我的问题是我应该在 UI 部分更改什么以及我应该在服务器部分更改什么?非常感谢您的帮助!
这是 UI 部分
libraries("plotly","ggplot2","plotrix")
ui <- fluidPage(
fluidRow(
column ( width = 3,
h4(span(tagList(icon("filter")), "Select season")),
selectizeInput('season', "", choices = shots$SeasonNr, selected = TRUE, multiple = TRUE),
br(),
h4(span(tagList(icon("filter")), "Select team")),
selectizeInput('team', "", choices = shots$TeamName, selected = TRUE, multiple = TRUE),
br()
)),
plotlyOutput("pos1")
)
这是我的服务器部分
server <- function(input,output, session){
observeEvent(c(input$team), {
team1 <- input$team
Season1 <- input$season
tp <- sqldf(sprintf("select TeamName, Training_ID, SeasonNr, Position, ShotAverage from shots where TeamName is '%s'", team1,"AND SeasonNr is '%s'", Season1))
dfNew<- aggregate(ShotAverage ~ tp$TeamName +tp$Position, data=tp, FUN=mean)
#creates empty dataframe
dfF <- data.frame()
#bind
dfF <- rbind(dfF, dfNew)
colnames(dfF) <- c("Team Name", "Position", "Average")
# render the plot
output$pos1 <-renderPlotly({
plot_ly(x = ~dfF$Position, y = ~dfF$Average, type = 'scatter', mode = 'bar')%>%
layout(title = 'Seasonal team statistics', xaxis = list(title = "Position"),yaxis = list(title = "Average"))
})
})}
shinyApp(ui, server)
解决方案
直到你用你的数据支持我们,我用另一个数据集做了一个类似的例子ggplot2
library("plotly","ggplot2","plotrix")
ui <- fluidPage(
fluidRow(
column ( width = 3,
h4(span(tagList(icon("filter")), "Select season")),
selectizeInput('season', "", choices = txhousing$year %>% unique(),selected = TRUE, multiple = TRUE),
br(),
h4(span(tagList(icon("filter")), "Select city")),
selectizeInput('city', "", choices = txhousing$city %>% unique(), selected = TRUE, multiple = TRUE),
br()
)),
plotlyOutput("pos1")
)
server <- function(input,output, session){
dta <- reactive({
req(input$city,input$season)
txhousing %>%
select(city,year,month,median) %>%
filter(city %in% input$city, year %in% input$season) %>%
group_by(city,month) %>%
summarise(median = mean(median))
})
output$pos1 <-renderPlotly({
plot_ly(data = dta(),x = ~month, y = ~median,type = "area",color = ~city) %>%
layout(title = 'Seasonal team statistics', xaxis = list(title = "Month"),yaxis = list(title = "Average"))
})
}
shinyApp(ui, server)
请不要说我已将您的代码分成一个反应式和一个渲染语句。这是一个更好的闪亮设计,然后将所有内容放在观察者声明中
希望这可以帮助!!
推荐阅读
- pdf - Pandoc URL 锚字符编码
- react-native - react-native FlatList 滚动到底部的聊天应用程序
- mongodb - MongoDB:批量创建或更新
- java - Quarkus 原生镜像是否支持 java 标准包?
- r - 我们如何根据树状图中形成的集群将 hclust 的标签放在表中
- python - 亚马逊应用商店没有回应 ETag
- c - 内联和普通函数的内存分配
- python-3.x - Python、Azure Servicebus如何捕捉异常处理?
- android - 如何自定义编辑文本?
- api-design - GET 端点:解析参数与添加新端点