如何在 ggplot 上叠加一张图片?

16

我想从网络上读取一张图片,例如:

http://api.altmetric.com/donut/502878_64x64.png

并将其插入到ggplot的右上角。

df <- data.frame(x=1:10, y=sample(1:100,10))
# a fake plot to try it on.
ggplot(df, aes(x,y)) + geom_point(size = 2)

我该如何做到这一点?


注释光栅。请参见此处的示例:http://cloud.github.com/downloads/hadley/ggplot2/guide-col.pdf - mnel
谢谢@mnel!我仍然需要能够从URL中读取这个图像。 - Maiasaura
3个回答

23
你正在寻找 annotation_rasterreadPNG
mypngfile <- download.file('http://api.altmetric.com/donut/502878_64x64.png', destfile = 'mypng.png', mode = 'wb')
library(png)
mypng <- readPNG('mypng.png')


p <- qplot(mpg, wt, data = mtcars) + theme_bw()
p + annotation_raster(mypng, ymin = 4.5,ymax= 5,xmin = 30,xmax = 35) + 
    geom_point()

在这里输入图片描述

这些新功能(以及更多示例)在这里描述。


5
正确的解决方案是这样的:
# This was one of my issues, reading a png from the web
my_image <-  readPNG(getURLContent('http://path.to/image.png'))
p1 + annotation_raster(my_image, ymin = 4,ymax= 5,xmin = 30,xmax = 40)

2

这里有一个很棒的Magick包,可以让你在ggplot图像上叠加GIF图像:

library(ggplot2)
library(magick)
library(here) # For making the script run without a wd
library(magrittr) # For piping the logo

# Make a simple plot and save it
ggplot(mpg, aes(displ, hwy, colour = class)) + 
  geom_point() + 
  ggtitle("Cars") +
  ggsave(filename = paste0(here("/"), last_plot()$labels$title, ".png"),
         width = 5, height = 4, dpi = 300)

# Call back the plot
# Now call back the plot
background <- image_read(paste0(here("/"), "Cars.png"))
# And bring in a logo
logo_raw <- image_read("https://i.imgur.com/e1IneGq.jpg") 

frames <- lapply(logo_raw, function(frame) {
  image_composite(background, frame, offset = "+70+800")
})

animation <- image_animate(image_join(frames))

image_write(animation, "~/Cars_Travolta.gif")

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接