Deskripsi masalah

Saya telah membuat objek gtable (juga gTree grob gDesc) myobj melalui myobj <- gridExtra::grid.arrange(g1,g2) dari dua ggplot objek g1,g2 beberapa waktu yang lalu dan sekarang saya harus mengembalikan data yang saya gunakan untuk membuat kedua ggplots. Apakah ada cara untuk melakukan ini dengan benar?

Apa yang saya coba sejauh ini

Saya sudah mencoba mengonversi myobj menggunakan berbagai fungsi, misalnya ggpubr::as_ggplot, menghasilkan objek dengan entri waiver() sebagai $data - jadi tidak berhasil di sana - dan saya sudah juga menyapu semua entri grobs di myobj di mana saya sebenarnya menemukan titik data di plot (terlihat seperti ini

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

), yang, bagaimanapun, hanya koordinat posisi $\in (0,1)$ w.r.t. sumbu yang sesuai. Maka saya mungkin bisa mendapatkan sumbu + rentang sumbu dan kemudian mengekstrapolasi titik data asli. Tapi itu tampaknya terlalu melelahkan. Apakah ada solusi yang lebih sederhana untuk ini?

Reprex (semacam)

Tidak yakin apakah ini benar-benar menghasilkan objek yang sama dengan yang saya miliki (karena milik saya hampir berusia 2 tahun), tetapi sebagai permulaan:

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)

1
R大卫 17 April 2020, 21:24

1 menjawab

Jawaban Terbaik

Anda tidak bisa; pada tahap ini (yaitu, setelah ggplotGrob) data telah diproses menjadi objek grafis dan pemetaan biasanya tidak dapat dibalik, seperti telur dadar.

Jika Anda putus asa untuk mendapatkan kembali beberapa nilai, Anda dapat memeriksa masing-masing grob yang sesuai dengan titik yang diplot, mis.

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 
1
user13357985 20 April 2020, 00:22