2012-09-28 4 views
14

J'aimerais lire une image sur le Web. par exemple.Comment superposer une image sur un ggplot?

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

et l'insérer dans le coin supérieur droit d'un 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) 

Comment puis-je faire cela?

+0

'annotation_raster'. Voir les exemples [ici] (http://cloud.github.com/downloads/hadley/ggplot2/guide-col.pdf) – mnel

+0

Merci @mnel! Je dois encore être capable de lire cette image à partir d'une URL – Maiasaura

Répondre

18

Vous recherchez annotation_raster et readPNG

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() 

enter image description here

Ces nouvelles fonctionnalités (et plus d'exemples) sont décrits here

+0

+1 pour m'indiquer 'annotation_raster' – Maiasaura

+0

Avec' readPNG' et 'download.file (..., mode = 'wb') – mnel

3

La bonne solution était la suivante:

# 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) 
1

Le simple ajout d'une mise à jour du super forfait Magick, qui permet même un GIF à superposer sur les images ggplot:

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") 
Questions connexes