Scale_Fill_Manual()用于ggvis Map?

时间:2015-05-25 16:31:05

标签: r fill 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中执行此操作?

作为一种解决方法,我创建了一个新的&#34; areaColor&#34;变量然后设置(:=)填充到areaColor,但我得到错误&#34;长度(x)不等于1。&#34;所以我想我只能设置一个值而不是我有条件定义的值向量。

2 个答案:

答案 0 :(得分: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

基本上,您需要在数据集中创建一个新列以反映区域列,并使用:=运算符使其工作。我认为还没有相当于scale_fill_manual的ggvis。

答案 1 :(得分: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