Я пытаюсь редактировать некоторые графики, созданные ggplot2, используя функции, предоставляемые сеткой пакетов и gridExtra. Я понимаю, что только ggplot2 может создавать действительно красивые многогранные сюжеты. Однако в некоторых случаях мне нравится создавать отдельные сюжеты, а затем объединять их вместе позже. Пытаясь сделать именно это, я столкнулся с каким-то неожиданным поведением с использованием cbind()
с grid.draw()
или grid.arrange()
при использовании графика ggplot2, который был отредактирован. Ниже приведен код для MWE:Неожиданное поведение с использованием cbind с измененным ggplotGrobs
#Load libraries
library(ggplot2); library(gridExtra)
#Load data
data(mtcars)
#Ggplot
p = qplot(wt,mpg,data=mtcars,color=cyl)
grob = ggplotGrob(p)
#Bold xlabel
grobEdited = editGrob(grid.force(grob),gPath("xlab","GRID.text"),grep=TRUE,gp=gpar(fontface="bold"))
#Visualize
grid.newpage()
grid.draw(grobEdited)
Он работал, как ожидалось. Теперь, чтобы проиллюстрировать эту проблему, позволяет cbind()
два одинаковых отредактированных графиков ggplot2:
#Cbind example with edited graphs
grid.newpage()
grid.draw(cbind(grobEdited,grobEdited))
Он не работает, как ожидалось! Теперь проверьте cbind()
на неопубликованных графах:
#Cbind example with grob
grid.newpage()
grid.draw(cbind(grob,grob))
Работы, как и ожидалось. Я новичок в сетчатых фигурах, так что я что-то делаю неправильно?
вопрос с 'grid.force()' вызова. Документация предполагает, что рисование результата может не иметь смысла в другом контексте рисования. Вы можете удалить эту часть кода? –
@ ryan-morton 'grid.force()' позволяет функциям редактирования иметь доступ ко всем гнетам в графе ggplot2, поэтому в этом контексте я считаю, что это необходимо. Думаю, я мог бы вручную отредактировать grob w/o, используя функции редактирования (что заставит думать намного сложнее). – user13317
Возможно, попробуйте 'cbind'ing перед редактированием ..' grobEdited = editGrob (grid.force (cbind (grob, grob)), gPath ("xlab", "GRID.text"), global = TRUE, grep = TRUE, gp = gpar (fontface = "bold", col = "red")) ' – user20650