2015-08-14 8 views
1

Очень простой вопрос, но, похоже, сложно найти подходящий ответ. Как разместить заголовок сюжета внизу. С мощью ggplot2 должен быть простой способ сделать это.ggplot2 - как разместить название участка внизу

qplot(rnorm(100)) + ggtitle("My Title") 

Вопрос был задан другими пользователями. Но предоставленные ответы требуют много ручной настройки и часто кропотливой. Я не хочу вручную настраивать plot.title = element_text(vjust = -XX) в theme(). Любой лучший способ сделать это?

ggplot2-plot-title-at-bottom

Get help with ggplot2

+0

Почему вы называете добавление одного параметра «требующий много ручной настройки и кропотливого»? Вы столкнулись с каким-либо нежелательным поведением со связанными решениями? – tonytonov

+0

Я рисую 3 отдельных графика, а затем объединяю их вместе с помощью 'grid.arrange'. Поэтому любое положение, которое я настраиваю на отдельных участках, не удерживается, если они помещены вместе или даже отдельные названия сюжетов неуместны после изменения размеров графиков для сохранения. – joarderm

ответ

4

Я предполагаю, что вы хотите что-то вдоль этих линий,

enter image description here

plots <- lapply(1:3, function(ii) 
         grobTree(rectGrob(gp=gpar(fill=ii,alpha=0.2)), 
           textGrob(paste0("plot", ii)))) 
titles <- lapply(1:3, function(ii) textGrob(paste0("title", ii))) 
legend <- grobTree(rectGrob(gp=gpar(fill=4,alpha=0.2)), 
           textGrob("legend")) 
line <- unit(1,"line") 
null <- unit(1, "null") 

layout <- matrix(c(1, 2, 7, 
        1, 5, 7, 
        1, 3, 7, 
        4, 6, 7), ncol=3, byrow=TRUE) 
grid.arrange(grobs = c(plots, titles, list(legend)), 
      layout_matrix = layout, 
      heights = unit.c(null, line, null, line)) 

Альтернативно, оберните каждый участок в arrangeGrob и использовать bottom аргумент в пользу название,

plots <- replicate(3, qplot(1,1), simplify=FALSE) 
wrap <- mapply(arrangeGrob,plots, 
       bottom = paste("title", seq_along(plots)), 
       SIMPLIFY=FALSE) 
grid.arrange(grobs=wrap, nrow=1) 

enter image description here

+0

Именно то, что я искал. Но как я могу разместить свои 3 объекта ggplot внутри 'grobTree'? Или, конвертировать объекты ggplot в объекты grob? – joarderm

+0

Я использовал базовые грызуны для иллюстрации, заменил их на ваши фактические сюжеты. – baptiste

+0

Я создал списки 'plot',' titles' и 'legend' и использовал' grid.arrange', как вы упомянули, но получило эту ошибку: Ошибка в организацииGrob (..., as.table = as.table, clip = clip, main = main,: Ввод должен быть grobs! – joarderm

Смежные вопросы