вставить изображение в подпись и отрегулировать его размер, чтобы размер шрифта - PullRequest
0 голосов
/ 08 апреля 2019

Задача

Я хотел бы вставить изображение между текстом в заголовке моего ggplot.

То, что я нашел на софар, это это решение, использующее gtable взлом . Но это решение несколько нежизнеспособно для меня, потому что я хочу добавить текст до и после изображения. Кроме того, он не изменяет размер изображения до фактического размера шрифта заголовка.

library(tidyverse)
library(magick)
library(grid)
library(gtable)

ggplot(iris, 
       aes(x = Sepal.Length, y = Sepal.Width)) +
  geom_point() +
  theme(plot.caption = element_text(hjust=0, 
                                    size = 10)) +
  labs(caption = "\uA9 *INSERT MY COMPANY LOGO HERE* My fabulous company, 2019")

without my logo

my_logo <- image_read("https://upload.wikimedia.org/wikipedia/commons/3/3e/Phalaenopsis_JPEG.png")
print(my_logo)

this is the logo I want o insert

Цель

Чего я хочу добиться, так это. Обратите внимание, что вертикальный размер логотипа (my_logo) равен размеру шрифта надписи.

enter image description here

1 Ответ

1 голос
/ 10 апреля 2019

Ответ, на который вы ссылаетесь, содержит все ингредиенты,

library(ggplot2)
library(grid)
library(dplyr)
library(gtable)

lg <- textGrob(label = "\uA9", x = unit(0, "npc"), just = "left")
rg <- textGrob(label = "My fabulous company, 2019", x = unit(0, "npc"), just = "left")
mg <- png::readPNG(system.file("img", "Rlogo.png", package="png")) %>%
  rasterGrob(interpolate = TRUE, height = grobHeight(rg))

p <- ggplot(mtcars, aes(wt, mpg)) + 
  geom_point() +
  labs(caption="") # to create space for title

# convert to grob
gt <- ggplotGrob(p)

# create new title as a tableGrob with separate cells for image & text
new.title <- gtable_row('caption', grobs = list(lg,mg,rg),
                        widths = unit.c(grobWidth(lg), grobWidth(mg), unit(1,"null")), 
                        height=unit(1,"null")) %>%
  # optional: adda fixed amt of space between image & text
  gtable_add_col_space(width = unit(5, "pt")) 

# assign new title back to gt
gt$grobs[[which(gt$layout$name == "caption")]] <- new.title

grid.newpage()
grid.draw(gt)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...