2012-10-30 8 views
11

ggplot2의 줄이 2 줄이고 전설에 "상어"와 "호랑이"가 있습니다. 상어/호랑이 이미지가 그 텍스트 대신 전설에 나타날 수있는 방법이 있습니까?ggplot2 범례의 레이블 대신 이미지 사용

+1

나는이 불가능하다는 말을하지 않을거야,하지만 당신은 R에서 얻을 수있는 해결책은 포토샵을 발사보다 waaaay를 어렵게 될 가능성이 높습니다. (그래도'grid.raster'를 보면 당신을 시작할 수 있습니다.) – joran

+0

또는 오픈 소스 열렬한 팬들을위한 [gimp] (http://www.gimp.org/). – Chase

+0

그래, 래스터 프로그램에서 손으로 그것을하고 노는 것입니다, 이것은 대규모 반복 그래프 생성을위한 것입니다 :) – nicolaskruchten

답변

32

그림을 eps 또는 svg으로 저장 한 다음 Illustrator (또는 동등한 오픈 소스 버전)에서 열고 이미지로 범례를 바꾸려면 더 많은 것을 ggsave을 사용하는 것이 좋습니다. R에서 모든 작업을 수행하지 못한다면 ggplot2annotation_raster을 사용하고 geom_text을 사용하여 옆에 텍스트를 추가 할 수 있습니다. 여기에 거친 시도 :

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 멋진데. –

+8

당신, 선생님, 1000 인터넷 맥주가 마땅합니다. 아니면 그냥 상어. 그것은 당신에게 달려 있습니다. – joran

+0

대단한 해결 방법 및 예! 감사! – nicolaskruchten

관련 문제