Scale_Fill_Manual() 用于 ggvis 地图?
Scale_Fill_Manual() for ggvis Map?
我导入了一些地图数据并定义了三个我感兴趣的"areas"。
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,但我得到了错误 "length(x) not equal to 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)
所以基本上您需要在数据集中创建一个新列来反映面积列并使用 :=
运算符使其工作。我认为还没有相当于 scale_fill_manual
的 ggvis。
虽然接受的答案允许您添加自定义颜色,但它会导致图例丢失,而且我不知道如何将其添加回来。
我觉得下面的方法简单一些。它不需要创建新变量,并保留图例。
您只需使用 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'))
这给出:
我导入了一些地图数据并定义了三个我感兴趣的"areas"。
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,但我得到了错误 "length(x) not equal to 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)
所以基本上您需要在数据集中创建一个新列来反映面积列并使用 :=
运算符使其工作。我认为还没有相当于 scale_fill_manual
的 ggvis。
虽然接受的答案允许您添加自定义颜色,但它会导致图例丢失,而且我不知道如何将其添加回来。
我觉得下面的方法简单一些。它不需要创建新变量,并保留图例。
您只需使用 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'))
这给出: