我正在创建一个分层的 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
来自新数据?)
虽然我多年前见过一些类似的问题,但我找不到答案
ggplot2
这里有一个选择:不要在
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)
)
请注意,如果没有任何示例数据,我无法完全确定这是否有效。