2012-10-30 15 views
11

Ggplot2'de 2 satırlık bir çizimim var ve efsanede "Sharks" ve "Tigers" var. Bu metnin yerine efsanede köpekbalığı/kaplan resimleri görebilmemin bir yolu var mı?ggplot2 etiketinde etiket yerine resim kullanın

+1

Bu imkansız olduğunu söylemek için gitmiyorum, ama sen R olsun herhangi bir çözümün sadece Photoshop kadar ateş daha waaaay zor olması muhtemeldir. (Ancak "grid.raster" 'a bakmaya başlayabilirsiniz.) – joran

+0

veya [gimp] (http://www.gimp.org/) orada açık kaynak meraklıları için. – Chase

+0

Evet, bir raster programında el ile yapıldığında no-go, bu büyük ölçekli tekrarlanan grafik üretimi içindir :) – nicolaskruchten

cevap

32

Şeklini eps veya svg olarak kaydetmek, daha sonra Illustrator'da (veya açık kaynak eşdeğerini) açmak ve efsaneyi resimlerle değiştirmek için ggsave'u kullanmaktan çok daha iyisiniz. Eğer R'de her şeyi yapmakta gerçekten ölüyorsanız, geçerli ggplot2'da annotation_raster'u kullanabilir ve yanında geom_text'u kullanarak bir metin ekleyebilirsiniz. İşte kaba bir girişimdir:

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 Bu harika. –

+8

Siz, efendim, 1000 internet birası hak ediyor. Ya da muhtemelen sadece bir köpekbalığı. Sana kalmış. – joran

+0

Harika bir çözüm ve örnek! Teşekkürler! – nicolaskruchten