问题描述
我第一次使用有光泽。我想创建一个反应式小部件,其中包含我所研究的感兴趣城市的名称。选择城市时,显示的图形必须更改。
这是我导入的csv:
```{r}
Data20 = read_delim("SAC55.csv",delim = ",")
tail(Data20)
```
`DIAS ` `SANTOAMARO ` ` CACHOEIRA ` `CDA ` `SAUBara ` SFC
<date> <dbl> <dbl> <dbl> <dbl> <dbl>
1 2020-08-10 690 333 466 47 668
2 2020-08-11 695 335 470 47 676
3 2020-08-12 717 350 483 48 687
4 2020-08-13 719 356 500 48 701
5 2020-08-14 736 370 507 49 708
6 2020-08-15 763 377 527 49 713
```{r}
colnames(Data20) <- gsub(" ","",colnames(Data20))
```
DIAS SANTOAMARO CACHOEIRA CDA SAUBara SFC
<date> <dbl> <dbl> <dbl> <dbl> <dbl>
1 2020-08-10 690 333 466 47 668
2 2020-08-11 695 335 470 47 676
3 2020-08-12 717 350 483 48 687
4 2020-08-13 719 356 500 48 701
5 2020-08-14 736 370 507 49 708
6 2020-08-15 763 377 527 49 713
这就是我试图创建反应性selectImput的方式
Data20 = read_delim("SAC55.csv",")
colnames(Data20) <- gsub(" ",colnames(Data20))
Data20$DIAS = as.Date(Data20$DIAS)
```{r}
ui = shinyUI(fluidPage(
sidebarLayout(
sidebarPanel(
selectInput(inputId = "Cidades",label = "Cidades",choices = c("Santo Amaro" = "SANTOAMARO","Cachoeira" = "CACHOEIRA","Cruz das Almas" = "CDA","Saubara" = "SAUBara","SFC" = "SFC"),selected = "SANTOAMARO")),mainPanel(plotlyOutput("city")))
))
server = shinyServer(function(input,output) {
II <- reactive({
Data20[,c("DIAS",input$Cidades)]
})
output$city = renderPlotly({
ggplotly(ggplot(data = II(),mapping = aes_string("DIAS",y = input$cidades),group=1))+
geom_line(size = 1,col="pink")+
geom_point(size = 1,col="red" )+
labs(x = "DIAS") +
labs(y = "CASOS")+
scale_x_date(NULL,date_labels = "%d,%b",date_breaks = "3 days")+
scale_y_continuous(limits = c(0,800),breaks = c(0,10,20,40,60,80,100,120,140,180,160,200,220,240,260,280,300,320,340,360,380,400,420,440,460,480,500,520,540,560,580,600,620,640,660,680,700,720,740,760,780,800,900))+
theme(plot.title = element_text(hjust = 0.5))+
theme(text=element_text(family=" Arial ",size=9,face="bold"))+
theme(axis.text.x = element_text(family="Arial",face="bold",size=10,angle=45))
})
})
shinyApp(ui = ui,server = server)
```
尽管带有城市名称的小部件会出现图形。我尝试了几种方法来解决此问题。 如果有人可以帮助我,我将非常感激。
解决方法
Felipe-看来这里可能发生了一些事情。
如果您的II()
reactive
表达式是从Data20
中提取日期和城市数据,那么您可能想要(请注意硬括号):
Data20[,c("DIAS",input$Cidades)]
否则,它将认为Data20
是一个函数。
此外,示例数据Data20
的列名称为“ SAUBARA”,但是selectInput
选项引用的是`SAUBARA`(带有反斜线和空格)-这些必须相同
最后,在ggplotly
中,如果希望y轴显示所选城市,则可以尝试:
aes_string(x = "DIAS",y = input$Cidades,group = 1)
...和ggplotly
应该在ggplot
对象上调用。
library(shiny)
library(ggplot2)
library(plotly)
ui <- shinyUI(fluidPage(
sidebarLayout(
sidebarPanel(
selectInput(inputId = "Cidades",label = "Cidades:",choices = c("Santo Amaro" = "SANTOAMARO","Cachoeira" = "CACHOEIRA","Cruz das Almas" = "CDA","Saubara" = "SAUBARA","SFC" = "SFC"),selected = "SANTOAMARO")),mainPanel(plotlyOutput("city")))
))
server <- shinyServer(function(input,output) {
II <- reactive({
Data20[,input$Cidades)]
})
output$city = renderPlotly({
ggplotly(ggplot(data = II(),mapping = aes_string(x = "DIAS",group = 1)) +
geom_line(size = 1,col="pink")+
geom_point(size = 1,col="red" )+
labs(x = "DIAS",tail(129)) +
labs(y = "CASOS")+
scale_x_date(NULL,date_labels = "%d,%b",date_breaks = "3 days")+
scale_y_continuous(limits = c(0,800),breaks = c(0,10,20,40,60,80,100,120,140,180,160,200,220,240,260,280,300,320,340,360,380,400,420,440,460,480,500,520,540,560,580,600,620,640,660,680,700,720,740,760,780,800,900))+
theme(plot.title = element_text(hjust = 0.5))+
theme(text=element_text(family=" Arial ",size=9,face="bold"))+
theme(axis.text.x = element_text(family="Arial",face="bold",size=10,angle=45)))
})
})
shinyApp(ui,server)