ggplot2 geom_point连续变量的大小中断(类别)

时间:2020-04-26 09:51:46

标签: r ggplot2

我正在尝试创建一个包含两个变量的地图,其中一个用多边形颜色(整数填充)表示,另一个用每个多边形质心处的气泡大小表示。具体来说,让我们考虑nc数据的两个变量AREABIR74,其中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值显示在地图上,这是我所不希望的。任何评论将不胜感激!

enter image description here

1 个答案:

答案 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创建