В принципе, я хочу написать функцию, которая работает в типичном стиле ggplot, где вы просто «добавляете» его, используя оператор +
. Теперь у меня есть следующее:Преобразование функции в функцию ggplot
Чтобы сделать это воспроизводимым, я сохранил следующее изображение в виде png в свой рабочий каталог и использовал mtcars для данных графика.
https://en.wikipedia.org/wiki/File:Chevypnglogo.png
library(png)
library(ggplot2)
library(grid)
logo <- readPNG(
source = 'Chevypnglogo.png'
)
logo_grob <- rasterGrob(logo, interpolate = TRUE)
add_logo <- function(g, logo) {
y.range <- ggplot_build(g)$panel$ranges[[1]]$y.range
y.space <- (y.range[2] - y.range[1])/100
height <- (y.range[2] - y.range[1])/10
x.range <- ggplot_build(g)$panel$ranges[[1]]$x.range
x.space <- (x.range[2] - x.range[1])/100
width <- (x.range[2] - x.range[1])/10
g <- g + annotation_custom(
logo,
xmin = x.range[1] + x.space, xmax = x.range[1] + width,
ymin = y.range[2] - height, ymax = y.range[2] - y.space
)
}
test.plot <- ggplot(mtcars, aes(x = wt, y = mpg)) +
geom_point()
test.plot <- add_logo(test.plot, logo_grob)
То, что я действительно хотел бы быть в состоянии сделать это:
test.plot <- ggplot(mtcars, aes(x = wt, y = mpg)) +
geom_point() +
add_logo(logo_grob)
Кто-нибудь знает, как изменить мой код, чтобы сделать это возможным?
Просто обратите внимание, что у вас есть изображение в другом формате, чем в коде. У вас есть 'jpg' на ссылке и' png' в коде. Кроме того, не могли бы вы включить библиотеки, которые вы используете, чтобы кто-нибудь мог воспроизвести ваш код? –
Хорошо, я посмотрю, смогу ли найти png. По какой-то причине пользовательское сохранение в виде png не работает в моем коде. –
Я неправильно понял вопрос. Если вам понадобится вычисленный диапазон ggplot2/etc для создания графика, вам нужно будет написать это как «Geom», и это будет намного проще в dev-версии ggplot2 на github. – hrbrmstr