Эстетика должна быть либо длины 1, либо такой же, как данные (1): цвет - PullRequest
0 голосов
/ 30 мая 2019

Я пытаюсь построить график, который будет меняться в зависимости от выбранных входов. Кроме того, данные на графике должны быть классифицированы по состоянию. Набор данных, который я использую: midwest от ggplot2. По какой-то причине цвет, который должен основываться на состоянии из набора данных midwest, не работает. Я получаю сообщение об ошибке при попытке использовать color = state или color = prof_poverty$state. Aesthetics must be either length 1 or the same as the data (1): colour. Должно быть 5 разных цветов, так как есть 5 разных состояний.

Это мой код:

интерфейс

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')
       )
   )
)

SERVER

# Define server that renders a map and a table
server <- function(input, output){
    # Combine the selected variables into a new data frame
    selectedData <- reactive({
        prof_poverty[input$xcol, input$ycol]
    })

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

1 Ответ

0 голосов
/ 30 мая 2019

Простое изменение данных, используемых в вызове 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)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...