在 ggplot 和 ggmap 之间切换但保留其余代码?

问题描述 投票:0回答:1

我正在构建一个功能,可以自动为用户数据绘制地图,具有各种选项,其中之一是允许不同的地图背景,要么是来自

ggmap::get_map
的 Google 卫星,要么是由
gbm.auto::gbm.basemap
处理的全球海岸线(我的自己的包)。问题是,绘图起始函数需要不同,分别为
ggmap
ggplot
,但绘图块的其余部分是相同的。我尝试将其作为大括号中的选项:

if (mapsource == "gbm.basemap") {
      ggplot() +
        ggspatial::layer_spatial(shape, col = "black")
    } else {
      ggmap::ggmap(myMap)
    } +
    stars::geom_stars(data = predabundstars |> sf::st_transform(3857), inherit.aes = FALSE) +
    [more code, fill, theme, etc]

这适用于第二个选项(其他;ggmap):

但是如果

mapsource == "gbm.basemap"
,它会运行大括号中的初始代码,但后面什么也不运行:

如果我在大括号之外运行 ggplot 代码,它工作正常,因此数据没有任何问题,因此它一定是“开始绘图的大括号”位:

我尝试切换它(

ggmap
然后
basemap
),并独立地完成它们(
if ggmap
if basemap
)但仍然没有骰子。这是
ggplot
的特点吗?有谁知道解决办法吗?我想“核”选项将复制整个绘图代码块,一个带有
ggmap
,一个带有
ggplot
,然后
ifelse
-ing 它们。我认为这会起作用,但它也有点糟糕,因为它太笨重了。

提前感谢您提供任何情报!

r if-statement ggplot2 ggmap
1个回答
1
投票

我建议在 if 语句中分配给一个对象,然后在 if 语句之后使用它:

if (mapsource == "gbm.basemap") {
      p <- ggplot() +
        ggspatial::layer_spatial(shape, col = "black")
    } else {
      p <- ggmap::ggmap(myMap)
    }
p <- p + stars::geom_stars(data = predabundstars |> sf::st_transform(3857), inherit.aes = FALSE)
© www.soinside.com 2019 - 2024. All rights reserved.