2015-03-31 2 views
2

Я пытаюсь добавить логотип к выходу, полученному из grid.arrange или arrGrob.Добавление логотипа в многострочный вывод в R или ggplot2

У меня есть ниже код:

библиотека (ggplot2)

p1 <- ggplot(ChickWeight, aes(x=Time, y=weight, colour=Diet, group=Chick)) + 
     geom_line() + 
     ggtitle("Growth curve for individual chicks") 

p2 <- ggplot(ChickWeight, aes(x=Time, y=weight, colour=Diet)) + 
      geom_point(alpha=.3) + 
      geom_smooth(alpha=.2, size=1) + 
      ggtitle("Fitted growth curve per diet") 

p3 <- ggplot(subset(ChickWeight, Time==21), aes(x=weight, colour=Diet))   
      + geom_density() + 
      ggtitle("Final weight, by diet") 

p4 <- ggplot(subset(ChickWeight, Time==21), aes(x=weight, fill=Diet)) + 
     geom_histogram(colour="black", binwidth=50) + 
     ggtitle("Final weight, by diet") 

я использовал grid.arrange (р1, р2, р3, р4, Ncol = 2, клип = 4), чтобы положить несколько графиков на один участок.

Но у меня возникла проблема при вставке логотипа в вышеуказанный grid.arrange output.

Я пробовал метод ниже, но получил следующее сообщение об ошибке.

b <- rasterGrob(img, width=unit(5,"cm"), x = unit(40,"cm")) 
    z1 <- ggplotGrob(grid.arrange(p1,p2,p3,p4,ncol=2,clip=4)) 
    z1<- gtable_add_grob(z1,b, t=1,l=1, r=5) 
    grid.newpage() 
     grid.draw(z1) 

Ошибка: Нет слоев в участке

Есть ли способ или метод, чтобы добавить логотип на выходе после arrangeGrob или grid.arrange.

ответ

2

Не gtable ответ, но это немного другой способ, чтобы добавить логотип, который может помочь

library(ggplot2) 
library(grid) 
library(png) 
library(gridExtra) 

# Read png 
img <- readPNG(system.file("img", "Rlogo.png", package="png"), FALSE) 

# Create grobs to add to plot 
my_g <- grobTree(rectGrob(gp=gpar(fill="black")), 
       textGrob("Some text", x=0, hjust=0, gp=gpar(col="white")), 
       rasterGrob(img, x=1, hjust=1)) 

# Plot 
p <- ggplot(mtcars , aes(wt , mpg)) + 
      geom_line() + 
      theme(plot.margin=unit(c(1, 1, 1,1), "cm")) 

# Add as a strip along top 
grid.arrange(my_g, arrangeGrob(p,p,p,p, ncol=2), heights=c(1, 9)) 

enter image description here

+0

@ user20650, спасибо большое. Это то, что я искал. Возможно ли вывести логотип в область участка. – user3719979

+0

Если вы хотите добавить его в сюжет, вы можете использовать 'annotation_custom' и указать координаты – user20650

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