2015-05-25 2 views
1

Я импортировал некоторые данные карты и определил три «области», представляющие для меня интерес.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» и затем установил (: =) fill to areaColor, но получил ошибку «length (x), не равную 1.». Поэтому я предполагаю, что могу установить только одно значение, а не вектор значений, который я определил условно.

ответ

1

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

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) 

enter image description here

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

+0

Спасибо большое LyzandeR. На самом деле я просто проголосовал за ваш ответ на всплывающие подсказки. Ты действительно помогаешь мне сегодня. –

+0

Добро пожаловать Макс! Очень рад услышать, что я помогу :) – LyzandeR

1

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

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

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

Это дает: enter image description here

Смежные вопросы