我有以下数据和从中生成的分面图。
# 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)
如何仅使用g2
中的内容从地图g1
中提取地图g1
,而不是从数据中再次生成?
答案 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对象内部更简单。