2012-10-30 19 views
11

Mam wykres w ggplot2 za pomocą, powiedzmy, 2 linii, aw legendzie mam "Rekiny" i "Tygrysy". Czy jest jakiś sposób, aby zamiast tekstu pojawiły się legendy rekina/tygrysa?Użyj obrazu zamiast etykiet w legendzie ggplot2

+1

nie zamierzam powiedzieć, że jest to niemożliwe, ale każde rozwiązanie można uzyskać w R może być WAAAAY trudniejsze niż po prostu rozpalania Photoshop. (Patrząc na 'grid.raster' może jednak zacząć.) – joran

+0

lub [gimp] (http://www.gimp.org/) dla miłośników open source. – Chase

+0

Tak, robienie tego ręcznie w programie rastrowym jest nieważne, to jest generowanie powtarzających się wykresów na dużą skalę :) – nicolaskruchten

Odpowiedz

32

Jesteś znacznie lepiej wyłączyć za pomocą ggsave zapisać rysunek jako eps lub svg, a następnie otworzyć go w programie Illustrator (lub odpowiednik otwartego źródła) i zastąpienie legendę z obrazami. Jeśli naprawdę nie jesteś gotowy na zrobienie tego wszystkiego w R, możesz użyć annotation_raster w bieżącym ggplot2 i dodać jakiś tekst obok niego, używając geom_text. Tutaj jest szorstka próba:

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 To jest fajne. –

+8

Ty, panie, zasługujesz na 1000 internetowych piw. A może tylko rekin. To zależy od Ciebie. – joran

+0

Niesamowite obejście i przykład! Dzięki! – nicolaskruchten

Powiązane problemy