我正在尝试创建一个函数(在 R 包内),将图像添加到 ggplot 的右下角。由于这将包含在 R 包中,因此我希望此函数以编程方式将该图像定位到绘图的右下角,而无需任何用户干预。
这是我到目前为止所拥有的:
# Setup
library(tidyverse)
get_png <- function(filename) {
grid::rasterGrob(png::readPNG(filename), interpolate = TRUE)
}
# DaSL logo
l <- get_png("logo.png")
# Main function
add_dasl_logo <- function(logo) {
list(annotation_custom(logo, xmin = 5, xmax = 7.5, ymin = 0, ymax = 15),
coord_cartesian(clip = "off"),
theme(plot.margin = unit(c(1, 1, 3, 1), "lines"))
)
}
# Plot
ggplot(mpg, aes(displ, hwy, colour = hwy)) +
geom_point() +
add_dasl_logo(l)
现在,x-y 最小/最大位置是为此特定 ggplot 手动设置的。我不希望普通 ggplot2 用户能够计算出 xmin、xmax、ymin、ymax 坐标。
如何以编程方式查找这些坐标并在 add_dasl_logo()
中使用它们,而无需任何用户干预?
最佳答案
您可以直接在grid::rasterGrob
中以相对坐标设置位置,而不是通过annotation_custom
在数据坐标中设置 Logo 的位置。这样,每个地 block 的 Logo 将放置在相同的位置,并且具有相同的高度和宽度。
# Setup
library(tidyverse)
get_png <- function(filename) {
grid::rasterGrob(png::readPNG(filename),
interpolate = TRUE,
x = unit(1, "npc") + unit(10, "pt"),
y = unit(0, "npc") - unit(20, "pt"),
height = unit(10, "pt"),
hjust = 1,
vjust = 1
)
}
download.file("/image/uj2rP.png", "logo.png")
# DaSL logo
l <- get_png("logo.png")
# Main function
add_dasl_logo <- function(logo) {
list(
annotation_custom(logo),
coord_cartesian(clip = "off"),
theme(plot.margin = unit(c(1, 1, 3, 1), "lines"))
)
}
ggplot(mpg, aes(displ, hwy, colour = hwy)) +
geom_point() +
add_dasl_logo(l)
ggplot(mpg, aes(cty, hwy, colour = hwy)) +
geom_point() +
add_dasl_logo(l)
关于r - 使用annotation_custom以编程方式在ggplot上定位图像,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/76354700/