我想报告一个地区出现在我的彩礼样本中的频率。但我认为当一个地区没有任何报告或 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)
))
如果没有您正在使用的实际数据,很难知道(如果您发布数据或可重现的示例,它会更容易提供帮助:)),但我几乎可以肯定这是一个数据问题。尝试在您正在使用的数据框列上运行
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。在我的示例中,它看起来像这样: