r - 在标题中插入图像并将其大小调整为字体大小
问题描述
问题
我想在我的ggplot
.
到目前为止,我发现这个解决方案使用了一些gtable
hacking。但是这个解决方案对我来说有点不可行,因为我想在图像之前和之后添加文本。此外,它不会将图像大小调整为标题的实际字体大小。
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")
my_logo <- image_read("https://upload.wikimedia.org/wikipedia/commons/3/3e/Phalaenopsis_JPEG.png")
print(my_logo)
目标
我想要达到的就是这个。请注意,徽标的 ( my_logo
) 垂直大小等于标题的字体大小。
解决方案
您链接到的答案提供了所有成分,
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)
推荐阅读
- python - 如何将大数据流式传输到 Google Cloud Storage?
- python - 当系数在 Python 中以 26 为模时,求行列式和逆矩阵
- java - Tomcat9 上的 java.lang.LinkageError:java.net.URLClassLoader 尝试了 DefaultTokenServices 的重复类定义
- bash - 比较新旧目录并重新压缩更改的文件
- reactjs - 在axios回调TypeError中反应typeerror:this.setState不是函数
- javascript - 重定向到同一个组件重新渲染
- c - C 程序未能将先前读取的内容插入文件内容
- r - 如何在同一轴上绘制两个单独的箱线图?
- python - 带有空格的回文递归和函数不起作用
- java - 如何向类型层次结构中的类添加缺少的方法以允许统一处理?