作者热门文章
- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我正在尝试使用 ggplot2
中的 sf
和 geom_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
#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
#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
不会改变任何东西。如果使用不同的美学(例如 fill
与 col
),这似乎不是问题。
最佳答案
实现您想要的结果或更一般地具有多个色标的一个选项是使用 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/
我是一名优秀的程序员,十分优秀!