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

person tumultous_rooster    schedule 08.02.2016    source источник


Ответы (1)


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

Итак, если renderPlot() вернется:

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

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

person alexwhan    schedule 08.02.2016
comment
Это кажется правильным путем, но я не работал, когда я его тестировал. Я собрал range вне реактивного вызова, но весы по-прежнему отображаются и ведут себя точно так же, как и в исходном вопросе. - person tumultous_rooster; 08.02.2016
comment
Попробуйте это с редактированием - добавив диапазон к аргументу ограничений - person alexwhan; 08.02.2016
comment
Это сработало - мне пришлось поместить value_range <- range(df$value) и fill_scale <- scale_fill_gradient(limits = range(value_range)) вне реактивного вызова, а затем print(p + fill_scale) внутри renderPlot() - person tumultous_rooster; 08.02.2016
comment
также, конечно, пришлось включить library(ggplot2). Я не понимал, что ggplot работал за кулисами с choroplethr. - person tumultous_rooster; 08.02.2016