gpt4 book ai didi

r - 多重 geom_sf 色彩美学(离散+连续)

转载 作者:行者123 更新时间:2023-12-04 13:06:52 29 4
gpt4 key购买 nike

我正在尝试使用 ggplot2 中的 sfgeom_sf 制作 map ,其中一组点数据使用连续颜色比例(-1 到 1),一组线数据使用离散比例(a、b、c、d)着色。但是,当我在同一张 map 中同时使用离散和连续美学时,我遇到了麻烦。发布了类似的问题 here ,但它没有处理映射美学。

这是一个简化的例子:

#Libraries
library(sf)
library(tidyverse)

#Make point data
N <- 1000
pointdat <- data.frame(x=runif(N,-1,1),y=runif(N,-1,1),z=rnorm(N)) %>%
st_as_sf(coords=c('x','y'))

ggplot(pointdat)+geom_sf(aes(col=z)) #Plot point data - this works

enter image description here

#Make line data
linedat <- rbind(c(1,1),c(1,-1),c(-1,-1),c(-1,1),c(1,1))*1.1
linedat <- lapply(1:(nrow(linedat)-1),function(x) st_linestring(linedat[c(x,x+1),]))
linedat <- st_sf(geometry=st_sfc(linedat)) %>% mutate(type=factor(letters[1:4]))

ggplot(linedat)+geom_sf(aes(col=type)) #Plot line data - this works

enter image description here

#When I try to plot point and line data together, it throws an error
ggplot()+
geom_sf(data=linedat,aes(col=type))+
geom_sf(data=pointdat,aes(col=z))

#Error: Continuous value supplied to discrete scale

显然,连续(点数据)和离散(线数据)美学之间存在冲突,但我如何让每次调用 geom_sf 为每个数据集使用不同的颜色美学?使用 inherit.aes = FALSE 不会改变任何东西。如果使用不同的美学(例如 fillcol),这似乎不是问题。

最佳答案

实现您想要的结果或更一般地具有多个色标的一个选项是使用 ggnewscale 包,如下所示:

# Libraries
library(sf)
#> Linking to GEOS 3.8.1, GDAL 3.2.1, PROJ 7.2.1
library(tidyverse)
library(ggnewscale)

set.seed(42)
N <- 1000
pointdat <- data.frame(x = runif(N, -1, 1), y = runif(N, -1, 1), z = rnorm(N)) %>%
st_as_sf(coords = c("x", "y"))

linedat <- rbind(c(1, 1), c(1, -1), c(-1, -1), c(-1, 1), c(1, 1)) * 1.1
linedat <- lapply(1:(nrow(linedat) - 1), function(x) st_linestring(linedat[c(x, x + 1), ]))
linedat <- st_sf(geometry = st_sfc(linedat)) %>% mutate(type = factor(letters[1:4]))

ggplot() +
geom_sf(data = linedat, aes(col = type)) +
new_scale_color() +
geom_sf(data = pointdat, aes(col = z))

关于r - 多重 geom_sf 色彩美学(离散+连续),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/69034360/

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