2012-10-30 9 views
11

Ho un grafico in ggplot2 con, diciamo, 2 righe e nella legenda ho "Squali" e "Tigri". C'è un modo per far apparire le immagini di squalo/tigre nella legenda invece di quel testo?Usa immagine invece di etichette nella legenda ggplot2

+1

Non ho intenzione di dire che questo è impossibile, ma qualsiasi soluzione si ottiene in R è probabile che sia troppo sopravvalutato più difficile che semplicemente accendere il Photoshop. (Guardare a 'grid.raster' potrebbe comunque iniziare.) – joran

+0

o [gimp] (http://www.gimp.org/) per gli appassionati open source disponibili. – Chase

+0

Sì, farlo a mano in un programma raster è un no-go, questo è per la generazione di grafici ripetuti su larga scala :) – nicolaskruchten

risposta

32

È molto meglio usare ggsave per salvare la figura come eps o svg, quindi aprirla in Illustrator (o equivalente open source) e sostituire la legenda con le immagini. Se sei davvero morto e stai facendo tutto in R, puoi usare annotation_raster nell'attuale ggplot2 e aggiungere del testo accanto ad esso usando geom_text. Ecco un tentativo di massima:

set.seed(10) 
library(ggplot2) 
library(RCurl) 
library(png) 
df <- data.frame(animal = sample(c("sharks", "tigers"),20, rep=T), time=1:20, 
       scariness = rnorm(20)*-20) 

shark <- readPNG(getURLContent("http://i.imgur.com/EOc2V.png")) 
tiger <- readPNG(getURLContent("http://i.imgur.com/zjIh5.png")) 

ggplot(df, aes(time, scariness, group = animal, color = animal)) + 
geom_line(show_guide = FALSE) + 
annotation_raster(tiger, xmin = nrow(df)-1, xmax = nrow(df), 
    ymin = max(df$scariness)-(.05*max(df$scariness)), 
    ymax = max(df$scariness), interpolate = T) + 
annotation_raster(shark, xmin = nrow(df)-1, xmax = nrow(df), 
    ymin = max(df$scariness)-(.1*max(df$scariness)), 
    ymax = max(df$scariness)-(.05*max(df$scariness)), interpolate = T) 

shark tiger scariness figure

+1

+1 È bello. –

+8

Tu, signore, meriti 1000 birre da internet. O forse solo uno squalo. Tocca a voi. – joran

+0

Straordinaria soluzione ed esempio! Grazie! – nicolaskruchten

Problemi correlati