在 geom_sf() , group_by 中显示 NA 值

问题描述 投票:0回答:1

我想报告一个地区出现在我的彩礼样本中的频率。但我认为当一个地区没有任何报告或 NAs 时,频率 == 0 所以该地区仍然是彩色的。我想将带有 NA 的地区显示为灰色。

bp_dist1 <- joined1 |>
  group_by(ADM2_EN) |> 
  mutate(freq = n()) |> 
  ggplot() +
  geom_sf(aes(fill = freq), na.rm=T) +
  scale_fill_gradient(low = "coral", high = "coral4") +
  theme(rect = element_blank(), axis.text.x = element_blank(),
        axis.text.y = element_blank(), axis.ticks = element_blank(), 
        axis.title.x = element_blank(), axis.title.y = element_blank()) +
  guides(fill = guide_colourbar(
    title = "Frequency of bride price reports", title.theme = element_text(size = 8),
    label.theme = element_text(size = 7)
    ))
r ggplot2 group-by na geom-sf
1个回答
0
投票

如果没有您正在使用的实际数据,很难知道(如果您发布数据或可重现的示例,它会更容易提供帮助:)),但我几乎可以肯定这是一个数据问题。尝试在您正在使用的数据框列上运行

any(is.na(freq))
。我怀疑它可能会出现
FALSE
,表明沿线的某个地方,您的
NA
s 已被删除或以其他方式被搞砸了。

如果它出现

TRUE
那么你知道你的数据框中确实有
NA
值,这是一个绘图问题。

如果您确实有

NA
s 并且这是一个绘图问题,请尝试将
na.value
参数添加到
scale_fill_gradient
:

library(sf)
# using nc as example dataset
nc <- sf::st_read(system.file("shape/nc.shp", package = "sf"), quiet = TRUE)

# make an integer column with some NA's
nc$var <- sample(
  c(sample(x = c(0:10), size = 94, replace = TRUE), rep(NA, 6))
)

# plot the data
ggplot(nc) +
  geom_sf(aes(fill = var)) + 
  scale_fill_gradient(low = "coral", high = "coral4", na.value = "green") +
  theme_void()

虽然,没有那个

na.value
ggplot()
仍然应该承认NA。在我的示例中,它看起来像这样:

最新问题
© www.soinside.com 2019 - 2025. All rights reserved.