我正在尝试使用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)
答案 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
小插图中。
如果这不能解决您的问题,或者您需要其他帮助,请举一个可复制的示例并将其包含在您的问题中。