2013-11-04 1 views
1

두 개의 변수로 데이터를 그룹화하는 ggplot2 플롯이 있으며 레이블 텍스트의 형식을 제어하는 ​​방법을 연습하고 싶습니다. 이 질문은 nlme 패키지의 Oxboys 데이터 세트를 사용하여 아래에 설명되어 있습니다. 'Subject'가 'Subject'와 'label'의 조합으로 고유하게 식별되도록 'label'이라는 열을 데이터에 추가했습니다. 필자가 실제로 작업하고있는 데이터에서 관심있는 두 변수는 그리드의 점을 고유하게 식별하는 x, y 좌표이므로 아래 출력 형식에 대한 이상한 제안입니다.ggplot2 범례에서 라벨의 형식을 지정하는 방법은 무엇입니까?

예를 들어 최고 범례 항목을 예로 들자면, 다음과 같이 다시 포맷 할 수 있습니다. "10 10"또는 "10,10"또는 "10ºN, 10ºW"*? sprintf()를 활용할 수있는 방법이 있습니까? 아니면 완전히 다른 방법을 생각할 수 있습니까?

한 가지 해결 방법은 데이터 프레임에 단일 새 열을 만들어 그룹을 정의하고 레이블을 제공하는 것입니다. gglpot에서 직접 형식을 지정하는 것보다 작업량이 적습니까?

library(nlme) 
library(ggplot2) 
df <- transform(Oxboys, label = Subject) 
p <- ggplot(df, aes(x = Occasion, y = height, 
        group = interaction(Subject, label), 
        color = interaction(Subject, label))) 
p + geom_line() 

enter image description here

* 범례 제목을 변경하는 답변에 대한 보너스 포인트.

답변

0

한 가지 해결 방법은 그룹을 정의하고 레이블을 제공하기 위해 데이터 프레임에 단일 새 열을 만드는 것입니다.

아무 문제가 없으며 암시 적으로 interaction을 사용하여 수행하고있는 작업입니다. 당신이 어떤 이유로 interaction에 결혼 한 경우, 당신은 분리 지정할 수 있습니다

interaction(Subject, label, sep=" ") # 10 10 

을하지만, 당신이 제안처럼 할 더 나은 및 데이터에 명시 적으로 열을 만들 것입니다 :

df$Group <- paste(df$Subject, "N ", df$label, "W") # 10N 10W 

그러면 당신은 그것을 미적 매핑에 사용했을 것입니다. 물론 이것은 전설에게 "그룹"의 제목을 줄 것이다, 그러나 당신은 적절한 규모 명명하여 범례 제목을 변경할 수 있습니다

p + scale_color_discrete("Your Title") 
0

당신은 또한 해들리의 plyr 패키지에 revalue을 사용할 수 있습니다, 내가 쓴 생각 정확하게이 목적을 위해.

library(plyr) 

# Rename Subject column 
replace.Subject <- sapply(levels(df$Subject), function(x) paste0(x, " N")) 
df$Subject <- revalue(df$Subject, replace.Subject) 

# Rename label column 
replace.label <- sapply(levels(df$label), function(x) paste0(x, " W")) 
df$label <- revalue(df$label, replace.label) 
관련 문제