2013-03-18 2 views
4

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

Это создание сетки и команд печати, которые я использую. Я импортировал все необходимые пакеты.

library(grid) 
pushViewport(viewport(gp=gpar(col="white"), 
      layout = grid.layout(4, 2, heights = unit(c(0.5,5,5,5), "null")))) 
grid.text("Summer Clear Day- August 2, 2012", 
      vp = viewport(layout.pos.row = 1, layout.pos.col = 1:2)) 
grid.frame(gp=gpar(col="white"), draw=TRUE) 
print(tot, vp = viewport(layout.pos.row = 2, layout.pos.col = 1)) 
print(gh, vp = viewport(layout.pos.row = 2, layout.pos.col = 2)) 
print(dir, vp = viewport(layout.pos.row = 3, layout.pos.col = 1)) 
print(ir, vp = viewport(layout.pos.row = 3, layout.pos.col = 2)) 
print(dh, vp = viewport(layout.pos.row = 4, layout.pos.col = 1)) 
print(uv, vp = viewport(layout.pos.row = 4, layout.pos.col = 2)) 

grid.frame, похоже, ничего не делает. Мой фон черный, поэтому я надеюсь создать вокруг него белую рамку.

+1

Пожалуйста сделайте ваш пример воспроизводимым. –

ответ

5

Например, вы можете использовать grid.rect. Я бы поставил его в отдельном viewport, прежде чем планировать ваш сюжет. Я имею в виду:

  1. Я толкаю первый видовой экран, я сюжет прямоугольник (рамка)
  2. я нажимаю Seconde Viewport, я создаю все свои участки.
  3. я поп мои 2 видовых

enter image description here

pushViewport(plotViewport(c(5,5,5,5))) 
grid.rect() 
grid.rect(width=unit(1, "npc")-unit(0.5,'lines'), 
      height=unit(1, "npc")-unit(0.5,'lines')) 
pushViewport(plotViewport(c(1,1,1,1), 
         layout = grid.layout(4, 2, 
              heights =  unit(c(1,5,5,5), "null")))) 
grid.text("Summer Clear Day- August 2, 2012", 
      vp = viewport(layout.pos.row = 1, layout.pos.col = 1:2)) 
k1 <- ggplot(mtcars, aes(factor(cyl), mpg)) + geom_boxplot() 

print(k1, vp = viewport(layout.pos.row = 2, layout.pos.col = 1)) 
print(k1, vp = viewport(layout.pos.row = 2, layout.pos.col = 2)) 
print(k1, vp = viewport(layout.pos.row = 3, layout.pos.col = 1)) 
print(k1, vp = viewport(layout.pos.row = 3, layout.pos.col = 2)) 
print(k1, vp = viewport(layout.pos.row = 4, layout.pos.col = 1)) 
print(k1, vp = viewport(layout.pos.row = 4, layout.pos.col = 2)) 
upViewport(2) 
+0

Спасибо, это именно то, что мне нужно! – user2183835

5

Компактная версия @ agstudy Ответим:

require(gridExtra) 
    grid.draw(grobTree(arrangeGrob(k1, k1, k1, k1, k1, k1, ncol=2, 
         main="Summer Clear Day- August 2, 2012"), 
        rectGrob(gp=gpar(lwd=2, fill=NA)))) 
+0

Это не дает точного результата, но это хороший способ уплотнения кода. Благодаря! – user2183835

+0

вы можете настроить его, как хотите. 'main = textGrob (" Title ", gp = gpar (col =" red "))' – baptiste

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