geom_line不显示线

时间:2018-10-08 04:23:01

标签: r ggplot2 shiny

我正在尝试使用ggplot包中的geom_line绘制一条线。这条线应该是交互式的,并且取决于所选时间序列上的所选状态和宏变量。尽管大多数看起来运行良好,但我似乎无法让geom_line()绘制任何东西。

我尝试对数据进行分组,并为'year'变量使用as.numeric()函数,但似乎无济于事。

感谢进阶!

服务器:

server <- function(input, output){


  output$plot1 <- renderPlot({

 ggplot(data = filter(c1, state == input$state1), 
        aes_string(x = as.numeric("year"), y = input$macroVar, group = 1)) +
   geom_line() +
   scale_x_continuous(limits = input$years) +
   labs(title = paste(col_alias(input$state1)),
        x = paste("Year"),
        y = paste(col_alias2(input$macroVar))) +
        theme_bw()})
  output$plot2 <- renderPlot({

ggplot(data = filter(c1, state == input$state2),  
       aes_string(x = as.numeric("year"), y = input$macroVar, group = 1)) +
  geom_line() +
  scale_x_continuous(limits = input$years) +
  labs(title = paste(col_alias(input$state2)),
       x = paste("Year"),
       y = paste(col_alias2(input$macroVar))) +
      theme_bw() })  
}   

shinyApp(ui = ui, server = server)

1 个答案:

答案 0 :(得分:0)

您不能在aes_string中混合使用字符串和非字符串调用。您可以使用as.numeric("year"),将as.numeric()函数与字符串列名称混合使用。看看这个可复制的例子:

# does not work
ggplot(mtcars, aes_string('mpg', as.factor('cyl'))) +
  geom_point()

# works
ggplot(mtcars, aes_string('mpg', 'as.factor(cyl)')) +
  geom_point()

因此,您可以将代码更改为'as.numeric(year)'作为快速解决方案。我也不太喜欢,aes_string在您开始将命令放在引号中时会变得很丑。相反,我建议(a)通过在绘图之前将year列转换为数字 来解决上游问题,或者(b)使用以下方法将代码更新为现代技术。请参见?aes帮助页面上的 Quasiquotation (准报价)部分,示例位于帮助页面的底部,更多示例位于链接的dplyr小插图中。

如果这不能解决您的问题,或者您需要其他帮助,请举一个可复制的示例并将其包含在您的问题中。