美学的长度必须为1或与数据(1)相同:颜色

时间:2019-05-30 01:14:41

标签: r ggplot2 shiny

我正在尝试绘制将根据所选输入而变化的图形。此外,图中的数据应按状态分类。我正在使用的数据集是midwest的{​​{1}}。由于某种原因,应基于ggplot2数据集状态的颜色无法正常工作。尝试使用midwestcolor = state时出现错误。 color = prof_poverty$state。由于存在5种不同的状态,因此应该有5种不同的颜色。

这是我的代码:

UI

Aesthetics must be either length 1 or the same as the data (1): colour

服务器

library(shiny)
library(dplyr)
library(ggplot2)

prof_poverty <- midwest %>%
    select(state, county, percprof, percadultpoverty, percpovertyknown, percbelowpoverty, percadultpoverty, percelderlypoverty, percchildbelowpovert)

ui <- fluidPage(
   pageWithSidebar(
       headerPanel('Poverty compared with number of professors'),
       sidebarPanel(
           selectInput('xcol', 'X variable', names(prof_poverty)[3:8]),
           selectInput('ycol', 'Y variable', names(prof_poverty)[3:8]),
           selected = names(prof_poverty)[[2]]
       ),
       mainPanel(
           plotOutput('poverty')
       )
   )
)

1 个答案:

答案 0 :(得分:0)

只需将ggplot调用中使用的数据更改为prof_poverty并使用aes_string即可。 (尽管有更多现代方法可以解决此问题)

在反应式selectedData中对数据进行子集处理的方式无效,并且在色彩美学中使用完整的状态向量正在触发错误。

由于renderPlot函数是反应性的,因此您实际上并不需要在此之前创建的反应性数据对象selectedData

server <- function(input, output){

  output$poverty <- renderPlot ({
    ggplot(data = prof_poverty, aes_string(x = input$xcol, y = input$ycol)) +
      geom_point(aes(color = prof_poverty$state)) })
}
# Run the application 
shinyApp(ui = ui, server = server)