R:是否可以从使用grid.arrange和ggplot创建的gtable对象中提取原始数据? 问题描述到目前为止我已经尝试过的代表(某种)

问题描述

我通过gtable从两个gTree对象中创建了grob个对象(也是gDesc myobj myobj <- gridExtra::grid.arrange(g1,g2)个对象ggplot g1g2前一段时间,现在我必须恢复用于创建两个ggplots的数据。有办法正确地做到这一点吗?

到目前为止我已经尝试过的

我已经尝试使用各种功能(例如myobj)来转换ggpubr::as_ggplot,从而导致对象的waiver()条目是$data-因此没有成功-而且我还扫过了grobs中的所有myobj项,实际上我在图中找到了数据点(看起来像这样

grobs.grobs.children.geom_point.points.5415.x1 
                                    0.04545455 

),但仅是位置坐标$ \ in(0,1)$w.r.t。相应的轴。然后,我大概可以获得轴+轴范围,然后外推原始数据点。但这似乎太费力了。有没有更简单的解决方案?

代表(某种)

不确定这实际上是否会导致与我拥有相同的对象(因为我的年龄将近2岁),但要从头开始:

library(ggplot)

# plot 1
g1 <- ggplot(mpg,aes(displ,cty)) + geom_point() + facet_grid(cols = vars(cyl))

# plot 2
g2 <- ggplot(mtcars,aes(mpg,wt,colour = factor(cyl))) + geom_point() + facet_grid(vars(cyl))

# create object
myobj <- gridExtra::grid.arrange(g1,g2,ncol=1)

# Now I would need some extract_data function to retrieve mpg and mtcars:
list_with_mpg_and_mtcars <- extract_data(myobj)

zq4352684 回答:R:是否可以从使用grid.arrange和ggplot创建的gtable对象中提取原始数据? 问题描述到目前为止我已经尝试过的代表(某种)

您不能;在此阶段(即ggplotGrob之后),数据已被处理为图形对象,并且映射通常不可逆,就像煎蛋一样。

如果您绝望要获取一些值,则可以检查与绘制点相对应的单个grob,例如

myobj$grobs[[2]]$grobs[[2]]$children[[3]][c('x','y')]

$x
 [1] 0.525145067698259native 0.587040618955513native
 [3] 0.525145067698259native 0.89651837524178native 
 [5] 0.819148936170213native 0.954545454545455native
 [7] 0.474854932301741native 0.699226305609285native
 [9] 0.648936170212766native 0.819148936170213native
[11] 0.470986460348163native

$y
 [1] 0.233037353850445native  0.435264173310709native 
 [3] 0.425966388507938native  0.205143999442133native 
 [5] 0.0691638967016109native 0.12030171311685native  
 [7] 0.266741823760489native  0.143546175123777native 
 [9] 0.191197322237977native  0.0454545454545455native
[11] 0.339961879082309native 
本文链接:https://www.f2er.com/2417755.html

大家都在问