Scale_Fill_Manual() для карты ggvis?

Я импортировал некоторые данные карты и определил три интересующие меня «области».

library(ggvis)
library(ggplot2)
countyDF <- map_data('county')
statesList = c("new york", "pennsylvania", "massachusetts", "new jersey",
           "connecticut", "maine", "new hampshire", "rhode island", "vermont")

mapDF <- subset(countyDF, region %in% statesList)
mapDF$area <- "New England"
mapDF$area[which(mapDF$region=="new york")] <- "New York"
mapDF$area[which(mapDF$region %in% c("pennsylvania", "new jersey"))] <- "Mid Atlantic" 

Затем я нарисовал карту, раскрашенную по области:

mapDF %>% ggvis(x=~long, y=~lat) %>%
  group_by(group) %>%
  layer_paths(fill= ~area)

Это дает мне хорошую карту, но я хотел бы настроить цветовую палитру по умолчанию. В идеале с чем-то вроде опции ggplot2 +scale_fill_manual(), которая позволяет вам устанавливать определенные цвета для определенных значений переменной. Есть ли возможность сделать это и в ggvis?

В качестве обходного пути я создал новую переменную «areaColor», а затем установил (:=) заливку в areaColor, но получил ошибку «длина (x) не равна 1». Поэтому я думаю, что могу установить только одно значение, а не вектор значений, которые я определил условно.


person Max Power    schedule 25.05.2015    source источник


Ответы (2)


Вы можете использовать это, чтобы изменить цвета:

mapDF$colour <- ifelse(mapDF$are == 'New England', 'blue', 
                       ifelse(mapDF$area == 'Mid Atlantic', 'orange', 
                              ifelse(mapDF$area == 'New York', 'red', '')))


mapDF %>% ggvis(x=~long, y=~lat) %>%
  group_by(group) %>%
  layer_paths(fill:= ~colour)

введите здесь описание изображения

Таким образом, вам нужно создать новый столбец в вашем наборе данных, чтобы отразить столбец площади, и использовать оператор :=, чтобы заставить его работать. Я не думаю, что есть ggvis, эквивалентный scale_fill_manual.

person LyzandeR    schedule 25.05.2015
comment
Большое спасибо LyzandeR. На самом деле я только что проголосовал за другой ваш ответ во всплывающих подсказках. Ты действительно помогаешь мне сегодня. - person Max Power; 25.05.2015
comment
Добро пожаловать Макс! Очень приятно слышать, что помогаю :) - person LyzandeR; 25.05.2015

Хотя принятый ответ позволяет вам добавлять собственные цвета, это приводит к потере легенды, и я не мог понять, как добавить ее обратно.

Я думаю, что следующий метод немного проще. Он не требует создания новой переменной и сохраняет легенду.

Вам просто нужно использовать scale_nominal() для сопоставления цветов с каждым уровнем группирующей переменной:

mapDF %>% ggvis(x=~long, y=~lat) %>%
    group_by(group) %>%
    layer_paths(fill= ~area) %>%
    scale_nominal("fill", 
           domain = c('Mid Atlantic','New York','New England'), 
           range = c('blue', 'orange', 'red'))

Это дает: введите здесь описание изображения

person Keith    schedule 18.05.2017