2011-11-15 4 views
3

특정 열의 값에 따라 hjust 및 vjust을 설정하는 방법에 대해이 사이트와 다른 사람들 주위를 잘 살펴 봤습니다.ggplot을 사용한 조건부 텍스트 서식 지정

YearStart <- c(2001,2002,2003,2001,2002,2003) 
    Team <- c("MU","MU","MU","MC","MC","MC") 
    Attendance <- c(67586,67601,67640,33058,34564,46834) 
    Position <- c(3,1,3,1,9,16) 
    offset <-c() 

    df <- data.frame(YearStart,Team,Attendance,Position) 

그래서

> head(df) 
    YearStart Team Attendance Position 
1  2001 MU  67586  3 
2  2002 MU  67601  1 
3  2003 MU  67640  3 
4  2001 MC  33058  1 
5  2002 MC  34564  9 
6  2003 MC  46834  16 

은 제가 acheive하고 싶은 것은 기반 vjust 값은 다음과 같습니다 데이터 구조 (그러나 여러 해 동안 많은 항목의 단순화 된 부분 집합이다)하는 방법을 보여줍니다 팀에. 이하, MU 데이터 라벨이 관련되어있는 데이터 군에서의 위치를 ​​-1 그래서 조절할 수 = MC 1 = vjust 및 는 vjust 될 것이다.

룩업 테이블을 포함하는 함수를 사용하는 몇 가지 예제를 해킹하려고 시도했지만 (에 대한 값이 많아서 직선 ifelse가 아니지만) 문자열을 전달할 수 없습니다. 이러한 라인을 따라 AES 법에 의해 기능 :

lut <- list(MU=1,MC=-1) 
vj <-function(x){lut[[x]]} 
p=ggplot(df, aes(YearStart, Attendance, label=Position, group=Team))+ 
    geom_point()+ 
    geom_text(aes(vjust = vj(Team))) 
print(p) 

다음은 위에서 아래의 각 점의 위치에서 각 그룹에 두번 라벨을 적용 의사 (틱) 코드이다.

p=ggplot(df, aes(YearStart, Attendance, label=Position, group=Team))+ 
    geom_point()+ 
    geom_text(aes(Team="MU"), vjust=1)+ 
    geom_text(aes(Team="MC"), vjust=-1) 
print(p) 

나는 이것에 대한 여러 가지 다른 전략을 시도하고 내가 잘못된 방향에서 이것을 시도하고 아니면 그냥 ggplot 구문의 아주 사소한 부분을 누락 여부를 알 수 없습니다. Excel에서 수작업으로 라벨을 붙이면 스톱 갭 솔루션을 완성했지만 지속 할 수는 없습니다 :-)

+0

답변을 참조하는 질문을 편집하지 마십시오. 이것은 매우 혼란 스럽습니다. 특정 요점을 명확히하려는 경우 꼭 그렇게하십시오. 당신이 대답에 대해 논평하기를 원한다면, 그 답에 따른 코멘트에 적절한 장소가 있습니다. – Andrie

+0

나는 이것이 더 명확하기 때문에 질문을 되돌 렸습니다. 그러나이를 수행하기 전에 새 코드에 오류가 있음을 발견했습니다. R은 대소 문자를 구별하며 data.frame에는'Offset'을 사용했지만'ggplot' 호출에는'offset'을 사용했습니다. – Andrie

답변

5

미학을 지정하려면 해당 미학을 data.frame의 열로 지정해야합니다.

(당신 조회 기능, 하나의 브라켓을 두 번 안된다고도 알 수 있습니다.)

그리고 마지막 생각은 : vjusthjust은 엄격하게/좌측 하단과 우측 상단/가지런 [0, 1] 사이에 정의되어 있습니다. 그러나 실제로는이를 확장 할 수 있습니다. 나는 (-0.2, 1.2)의 설정이 대부분의 경우에 꽤 잘 작동한다는 것을 알았습니다.

lut <- list(MU=-0.2, MC=1.2) 
vj <- function(x) lut[x] 

df$offset <- vj(df$Team) 

library(ggplot2) 
ggplot(df, aes(YearStart, Attendance, label=Position, group=Team)) + 
    geom_point(aes(colour=Team)) + 
    geom_text(aes(vjust = offset)) 

enter image description here

+0

멋지다 - 모두 실행되지만 여전히 기본 vjust = 0.5가 적용됩니다. 내 그림은이 모양처럼 보이지만 점 위에는 레이블이 있고 stdout에는 경고 나 오류가 없습니다. – DHBI

+0

'df $ offset'에 올바른 값이 들어 있는지 확인 했습니까? – Andrie

+0

오타를 만들었습니다. R은 대소 문자를 구분합니다. data.frame에서는'Offset'을 사용했지만 gplot 코드에서는'offset'을 사용했습니다. – Andrie