分层ggplot - 避免数据集重复

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

我正在创建一个分层的 ggplot2 图,首先在 ggplot2::ggplot() 函数中指定全局数据和映射属性。当我添加后续图层时,只要这些图层仅具有全局定义的美观或数据,就可以正常工作。但是,如果我需要在后面的层中添加新的数据/美学映射,它似乎会清除全局数据 - ggplot 无法再找到它。有没有办法同时使用特定层的新数据和全局定义的数据?示例:

base_plot <- ggplot2::ggplot(
    data = dplyr::select(df, c("County", "geometry")),
    mapping = ggplot2::aes(geometry = geometry)
)
# works fine
new_plot <- 
    base_plot +
    ggiraph::geom_sf_interactive(
        mapping = aes(geometry = geometry, tooltip = County)
    )
base_plot <- ggplot2::ggplot(
    data = dplyr::select(df, c("County", "geometry")),
    mapping = ggplot2::aes(geometry = geometry)
)
# fails, with error "object 'geometry' not found"
new_plot <- 
    base_plot +
    ggiraph::geom_sf_interactive(
        data = df_with_just_metric_column,
        mapping = aes(geometry = geometry, tooltip = County, fill = metric)
    )

看来新层切换到仅在我们提供的新数据中查找all这些字段(

df_with_just_metric_column
),但我不想将这些字段复制到该数据帧 - 是否有我们可以让 ggplot/ggiraph 同时查看添加到图中的全局定义的数据吗?(抓取
geometry
County
来自全局定义的数据,
metric
来自新数据?)

虽然我多年前见过一些类似的问题,但我找不到答案

  1. 是最近的,反映了
    ggplot2
  2. 当前的能力
  3. 解决了我们尝试将已添加到图中的现有数据与用于新层的新数据结合起来的特定情况。
r ggplot2 tidyverse ggiraph
1个回答
0
投票

这里有一个选择:不要在

data
中指定
geom_sf_interactive
,而是给出
df_with_just_metric_column$metric
。这样您仍然可以从
metric
访问
df_with_just_metric_column
,而无需覆盖基础图中的数据。

base_plot <- ggplot2::ggplot(
    data = dplyr::select(df, c("County", "geometry")),
    mapping = ggplot2::aes(geometry = geometry)
)
# fails, with error "object 'geometry' not found"
new_plot <- 
    base_plot +
    ggiraph::geom_sf_interactive(
        mapping = aes(geometry = geometry, tooltip = County, fill = df_with_just_metric_column$metric)
    )

请注意,如果没有任何示例数据,我无法完全确定这是否有效。

© www.soinside.com 2019 - 2024. All rights reserved.