Исправлен диапазон между хороплетами в Shiny при использовании пакета choroplethr

У меня очень простое приложение Shiny, с кодом внизу вопроса.

Приложение позволяет нам смотреть на 2000 и 2001 годы. В обоих случаях Калифорния является самым мрачным штатом, так как имеет самые высокие значения (500 и 1000 соответственно).

Моя проблема в том, что я хотел бы установить шкалу для цветов, которые будут фиксироваться по обоим годам. Обратите внимание, что в Калифорнии первый год темно-синий (соответствует значению 1000).

Теперь обратите внимание, что в Калифорнии второй год точно такой же синий (соответствует значению 500).

При взгляде на хороплетов в том виде, в каком они стоят, легко упустить тот факт, что значение упало вдвое за годы (и, разумеется, по-разному это происходит в других штатах). Я хотел бы, чтобы способ исправить диапазон между графиками. Как мне этого добиться?

df <- structure(list(region = c("alabama", "alabama", "alaska", "alaska", 
                                "arizona", "arizona", "arkansas", "arkansas", "california", "california", 
                                "colorado", "colorado", "connecticut", "connecticut", "delaware", 
                                "delaware", "district of columbia", "district of columbia", "florida", 
                                "florida", "georgia", "georgia", "hawaii", "hawaii", "idaho", 
                                "idaho", "illinois", "illinois", "indiana", "indiana", "iowa", 
                                "iowa", "kansas", "kansas", "kentucky", "kentucky", "louisiana", 
                                "louisiana", "maine", "maine", "maryland", "maryland", "massachusetts", 
                                "massachusetts", "michigan", "michigan", "minnesota", "minnesota", 
                                "mississippi", "mississippi", "missouri", "missouri", "montana", 
                                "montana", "nebraska", "nebraska", "nevada", "nevada", "new hampshire", 
                                "new hampshire", "new jersey", "new jersey", "new mexico", "new mexico", 
                                "new york", "new york", "north carolina", "north carolina", "north dakota", 
                                "north dakota", "ohio", "ohio", "oklahoma", "oklahoma", "oregon", 
                                "oregon", "pennsylvania", "pennsylvania", "rhode island", "rhode island", 
                                "south carolina", "south carolina", "south dakota", "south dakota", 
                                "tennessee", "tennessee", "texas", "texas", "utah", "utah", "vermont", 
                                "vermont", "virginia", "virginia", "washington", "washington", 
                                "west virginia", "west virginia", "wisconsin", "wisconsin", "wyoming", 
                                "wyoming"), date = c("2000", "2001", "2000", "2001", "2000", 
                                                     "2001", "2000", "2001", "2000", "2001", "2000", "2001", "2000", 
                                                     "2001", "2000", "2001", "2000", "2001", "2000", "2001", "2000", 
                                                     "2001", "2000", "2001", "2000", "2001", "2000", "2001", "2000", 
                                                     "2001", "2000", "2001", "2000", "2001", "2000", "2001", "2000", 
                                                     "2001", "2000", "2001", "2000", "2001", "2000", "2001", "2000", 
                                                     "2001", "2000", "2001", "2000", "2001", "2000", "2001", "2000", 
                                                     "2001", "2000", "2001", "2000", "2001", "2000", "2001", "2000", 
                                                     "2001", "2000", "2001", "2000", "2001", "2000", "2001", "2000", 
                                                     "2001", "2000", "2001", "2000", "2001", "2000", "2001", "2000", 
                                                     "2001", "2000", "2001", "2000", "2001", "2000", "2001", "2000", 
                                                     "2001", "2000", "2001", "2000", "2001", "2000", "2001", "2000", 
                                                     "2001", "2000", "2001", "2000", "2001", "2000", "2001", "2000", 
                                                     "2001"), value = c(19, 11, 83, 80, 87, 79, 87, 45, 1000, 500, 
                                                                        89, 163, 41, 101, 53, 3, 39, 55, 500, 347, 71, 89, 37, 43, 23, 
                                                                        41, 243, 175, 271, 215, 75, 3, 22, 33, 11, 15, 5, 55, 18, 60, 
                                                                        17, 79, 59, 61, 193, 165, 11, 65, 237, 299, 373, 233, 17, 7, 
                                                                        69, 21, 433, 81, 79, 63, 127, 95, 5, 111, 341, 373, 53, 53, 
                                                                        35, 63, 157, 81, 75, 35, 57, 23, 445, 511, 17, 15, 21, 79, 118, 
                                                                        88, 153, 167, 68, 471, 1, 83, 18, 8, 55, 21, 95, 35, 33, 47, 
                                                                        13, 23, 7, 17)), .Names = c("region", "date", "value"), row.names = c(NA, 
                                                                                                                                              -102L), class = c("tbl_df", "tbl", "data.frame"))


## app.R ##

library(dplyr)
library(choroplethr)
library(choroplethrMaps)
library(lubridate)

server <- function(input, output) {



  output$distPlot <- renderPlot({

    df1 <- filter(df, date==as.character(input$year))



    p <- state_choropleth(df1,
                          title      = "Population Estimates",
                          legend     = "Population",
                          num_colors = 1
    )
    print(p)

  })
}

ui <- fluidPage(
  sidebarLayout(
    sidebarPanel(
      sliderInput("year", "Year:", min = 2000, max = 2001, step=1, value = 2000, sep = "")
    ),
    mainPanel(plotOutput("distPlot"))
  )
)

shinyApp(ui = ui, server = server)

1 ответ

Решение

Поскольку state_choropleth() возвращает ggplot объект, вы можете использовать scale_fill_gradient(), Вы можете получить диапазон всех данных с range(df$value),

Так что если renderPlot() возвращает:

print(p + scale_fill_gradient(limits = range(df$value))

это должно сделать работу.

Другие вопросы по тегам