当前位置: 首页 > 知识库问答 >
问题:

多重geom_sf颜色美学(离散连续)

韶和璧
2023-03-14

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

下面是一个简化的示例:

#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为每个数据集使用不同的颜色美学?使用<code>inherit。aes=FALSE不会更改任何内容。如果使用不同的美学(例如fillvscol),这似乎不是问题。

共有1个答案

凌琦
2023-03-14

实现所需结果或更普遍地拥有多个色阶的一种选择是使用 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))
 类似资料:
  • 很难描述我在做什么。我基本上想要创建一个离散的彩虹渐变,这样对于I个JButtons的任何一行,它们上的颜色渐变都将看起来是彩虹的。 我做了以下操作,但它只创建了一个红色渐变,然后是绿色渐变,然后是蓝色渐变: 你知道我怎样才能得到某种彩虹效果吗? 谢谢 编辑: 我使用了一个正弦函数,它似乎工作的稍微好一点,但不知道如何定义它,所以我得到了一个“彩虹波”在我想要的区域:

  • Navicat 提供颜色高亮显示连接以识别连接及它们的数据库对象。高亮显示的颜色显示在连接窗格及数据库对象窗口的菜单栏。 要高亮显示一个连接,在连接上右击并从弹出菜单选择 颜色。

  • Navicat 提供以颜色高亮显示连接的功能,用于标识连接和它们的数据库对象。当你处理数据库对象时,它可以让你立即知道你正连接到哪个连接。高亮显示的颜色会显示在导航窗格和对象窗口的菜单栏或选项卡。 若要高亮显示一个连接,请右击导航窗格中的连接并选择“颜色”。

  • Navicat 提供以颜色高亮显示连接的功能,用于标识连接和它们的数据库对象。当你处理数据库对象时,它可以让你立即知道你正连接到哪个连接。高亮显示的颜色会显示在导航窗格和对象窗口的选项卡。 若要高亮显示一个连接,请按住 Control 键并点按导航窗格中的连接,然后选择“颜色”。

  • Navicat 提供以颜色高亮显示连接的功能,用于识别连接和它们的数据库对象。当你处理数据库对象时,它可以让你立即知道你正连接到哪个连接。高亮显示的颜色会显示在导航窗格和对象窗口的菜单栏或选项卡。 若要高亮显示一个连接,请右击导航窗格中的连接并选择“颜色”。

  • 使用 ggplot/geom_sf 绘制地图时,映射到美学的任何图层都将在图例中表示。我还知道,使用 可用于强制图例表示和操作使用的符号系统(点、线、面)。但是,当绘制简单对象而无需进一步将它们映射到美学时,即使用颜色/填充来显示附加信息时,不会给出图例条目。使用 时似乎也是如此。我在GitHub上发现了这个问题:https://github.com/tidyverse/ggplot2/issue