gpt4 book ai didi

r - 如何仅使用 ggplot2 命令将 "break"连续变量转换为离散区间

转载 作者:行者123 更新时间:2023-12-03 08:16:22 24 4
gpt4 key购买 nike

我正在尝试使用 geom_sf 几何图形在 ggplot 中制作图表。我可以使用 scale_fill_scontinuous 进行绘图,但是我想将标题分成离散的间隔,这样我就可以使用 scale_fill_brewer 而不是使用 scale_fill_scontinuous 。我不想在 ggplot 之外创建中间 data.frame 或向量。

目前我的图表如下所示:

ggplot(data=uniao3, aes(fill=`Área Úmida`))+
geom_sf()+
scale_fill_continuous(limits=c(0,20000),
breaks=c(500,2000,8000,15000,20000),
labels=c('500','200-2k','2k-8k','8k-15k','15k>'),
name="Wetland")+
facet_wrap(~Ano)

输出 enter image description here

我希望图例(比例)不显示为渐变,而是显示为与此类似的 block :

enter image description here

我知道 scale_fill_brewer 命令非常优雅且高效地完成此操作,但是如何将连续变量设置为 ggplot 内的离散变量?

最佳答案

我会选择scale_fill_stepsn,尽管评论中还有多种其他解决方案。该函数负责根据您所需的中断离散化连续变量,并且它允许使用colours向量中的任何颜色(而不仅仅是预先准备的调色板)。

另一个优点是中断和颜色向量的长度不需要匹配

获取 sf 对象

library(ggplot2)
library(sf)
#> Linking to GEOS 3.8.1, GDAL 3.2.1, PROJ 7.2.1

# get sf data
nc <- sf::st_read(system.file("shape/nc.shp", package = "sf"), quiet = TRUE)

使用scale_fill_stepsn

对于将连续数据切割成离散切片,这可能是最简单、最充分的方法。

# set breaks and colours
breaks <- seq(0, 0.3, by = 0.02)
breaks
#> [1] 0.00 0.02 0.04 0.06 0.08 0.10 0.12 0.14 0.16 0.18 0.20 0.22 0.24 0.26 0.28
#> [16] 0.30

cols <- RColorBrewer::brewer.pal(9, "Spectral")
cols
#> [1] "#D53E4F" "#F46D43" "#FDAE61" "#FEE08B" "#FFFFBF" "#E6F598" "#ABDDA4"
#> [8] "#66C2A5" "#3288BD"

# plot
ggplot(data = nc, aes(fill = AREA)) +
geom_sf() +
scale_fill_stepsn(colours = cols,
breaks = breaks,
name = "area") +
theme_minimal()

请注意,为了清楚起见,我在 ggplot 调用之外分配了分隔符和列,但您当然可以直接在 ggplot 调用中指定它们。

使用scale_fill_brewer

这对于真实的离散数据来说更合适,但也适用于离散连续数据。

在这里,您需要在设置比例之前自己进行切割。在 ggplot2 调用中使用带有指定 breakcut 会将您的数值变量转换为一个因子。

使用 scale_fill_brewer 选择颜色的灵活性稍差一些,因为您需要(?)使用现有的 RColorBrewer 调色板。

这样,颜色图例看起来与示例图例更相似,其中每个切口都被标记,而不是断点。

# plot
ggplot(data = nc, aes(fill = cut(AREA, breaks = seq(0, 0.3, by = 0.02)))) +
geom_sf() +
scale_fill_brewer(type = "qual",
# labels = labels, # if you must
palette = "Spectral",
name = "area") +
theme_minimal()

reprex package 于 2021 年 9 月 19 日创建(v2.0.1)

关于r - 如何仅使用 ggplot2 命令将 "break"连续变量转换为离散区间,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/69239816/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com