ggplot:从分面图中提取选定的子图

时间:2018-01-16 17:42:37

标签: r ggplot2 facet facet-wrap

我有以下数据和从中生成的分面图。

# Data generation
dataPlot <- mtcars %>% select(mpg, wt, carb) %>% 
  group_by(carb) %>% mutate(N = n()) %>% data.frame()

# Original Faceted plot
g1 <- ggplot(dataPlot, aes(mpg, wt)) + geom_point() + 
  facet_wrap(~carb) + ggtitle("Original plot")

我想从上面的图中提取以下图表。为了比较,我从数据本身生成它。

# Refined plot with minimum 4 points
g2 <- ggplot(dataPlot %>% filter(N > 3), aes(mpg, wt)) + geom_point() + 
  facet_wrap(~carb) + ggtitle("Refined plot")

# Plots together
grid.arrange(g1, g2, ncol=2)

enter image description here

如何仅使用g2中的内容从地图g1中提取地图g1,而不是从数据中再次生成?

1 个答案:

答案 0 :(得分:2)

如果你看str(g1),它就是一个包含大量关于要绘制内容的信息的列表。第一个元素是data,您可以覆盖,有效地将g1更改为g2

library(tidyverse)

g1 <- ggplot(mtcars, aes(mpg, wt)) + 
    geom_point() + 
    facet_wrap(~ carb) + 
    ggtitle("Original plot")


g1$data <- g1$data %>% group_by(carb) %>% filter(n() > 3)

g1

也就是说,重绘通常比直接搞乱ggplot对象内部更简单。