R语言 ggplot2是否可以使用连续图例和离散值?

cld4siwp  于 2023-04-27  发布在  其他
关注(0)|答案(1)|浏览(155)

我正在用tidyterraggplot2制作测深图。

library(terra)
#> terra 1.7.23
library(tidyterra)
#> 
#> Attaching package: 'tidyterra'
#> The following object is masked from 'package:stats':
#> 
#>     filter
library(ggplot2)

f <- system.file("extdata/volcano2.tif", package = "tidyterra")
r <- rast(f)

ggplot() +
  geom_spatraster_contour_filled(data = r, breaks = seq(80, 200, 5)) +
  scale_fill_hypso_d(palette = "colombia_bathy")

我使用了许多不同的轮廓(水平),所以图例包括许多关键字。可以将其更改为连续图例吗?我已经尝试使用guide_colorsteps(),这是一个好一点,但它仍然有很多水平。我想,例如,有一个连续的图例,每50米休息,同时保持轮廓在5米。

ggplot() +
  geom_spatraster_contour_filled(data = r, breaks = seq(80, 200, 5)) +
  scale_fill_hypso_d(
    palette = "colombia_bathy",
    guide = guide_colorsteps()
  )

创建于2023-04-21使用reprex v2.0.2

h7appiyu

h7appiyu1#

据我所知,guide_colorbar需要一个连续的比例。但是如果你可以伪造一些,你可以通过第二个图创建连续的颜色条,然后通过eidogg. cowplot::get_legend提取它,然后把它粘到你的主图上。这并不完美,需要对图的大小和高度进行一些调整。

library(terra)
library(tidyterra)
library(ggplot2)

f <- system.file("extdata/volcano2.tif", package = "tidyterra")
r <- rast(f)

p1 <- ggplot() +
  geom_spatraster_contour_filled(data = r, breaks = seq(80, 200, 5)) +
  scale_fill_hypso_d(
    palette = "colombia_bathy"
  )

legend <- (ggplot() +
  geom_spatraster(data = r) +
  scale_fill_hypso_c(
    palette = "colombia_bathy",
    guide = guide_colorbar(axis.limits = TRUE)
  )) |> cowplot::get_legend()

library(patchwork)

(p1 + guides(fill = "none")) + legend +
  plot_layout(widths = c(4, 1))

相关问题