我正在尝试创建一个包含两个变量的地图,其中一个用多边形颜色(整数填充)表示,另一个用每个多边形质心处的气泡大小表示。具体来说,让我们考虑nc
数据的两个变量AREA
和BIR74
,其中AREA
填充多边形,BIR74
由大小表示。为了使其与实际情况相似,我为BIR74
变量创建了一些NA值。
library(tidyverse)
library(sf)
nc <- sf::st_read(system.file("shape/nc.shp", package="sf"))
nc_centroids <- data.frame(nc %>% st_centroid() %>% st_coordinates())
nc <- nc %>% bind_cols(nc, nc_centroids) %>% mutate(BIR74 = replace(BIR74, AREA < 0.08, NA))
现在,我希望为BIR74
创建一个自定义间隔,以便气泡大小为“大”或“小”,但是即使提供了scale_size_continuous(breaks = c(1000, 20000))
,地图上的气泡大小似乎要连续。例如,查看地图中的红色圆圈区域,该区域显示至少三个不同的圆圈大小。
这就是我尝试过的。
ggplot(nc) + geom_sf(aes(fill = AREA), colour = "white") +
geom_point(aes( x = X, y = Y, size = BIR74)) +
scale_size_continuous(breaks = c(1000, 20000))
我可以将BIR74
变量转换为字符/因数,但是在这种情况下,我不能阻止NA值显示在地图上,这是我所不希望的。任何评论将不胜感激!
答案 0 :(得分:1)
小数位数中断不会更改数据的显示方式。设置限制也不会导致更改。因此,请先转换数据,然后绘制不同的大小。
首先转换数据,然后绘制不同的大小。
library(tidyverse)
library(sf)
nc <- sf::st_read(system.file("shape/nc.shp", package="sf"))
nc_centroids <- data.frame(nc %>% st_centroid() %>% st_coordinates())
nc2 <-
nc %>%
bind_cols(nc, nc_centroids) %>%
mutate(BIR74 = replace(BIR74, AREA < 0.08, NA),
BIR74 = if_else(BIR74 < 10000, 1, 2)) %>%
drop_na("BIR74") # this is not necessary, but it makes it visually clearer where you have missing values
ggplot(nc2) +
geom_sf(aes(fill = AREA), colour = "white") +
geom_point(aes( x = X, y = Y, size = BIR74)) +
scale_size_continuous(breaks = 1:2)
由reprex package(v0.3.0)于2020-04-26创建