2012-07-17 2 views
3

geom_line() 플롯에 directlabels 패키지와 함께 ggplot2를 사용하고 있는데 라벨 중 하나에 "X-M"이라고 표시하고 싶습니다. 그러나 내 data.frame() "X-M"열 이름으로 "X.M", 이름이 바뀌었고 사용자 정의 레이블 이름을 direct.label 함수를 제공하는 방법에 대한 설명서를 찾을 수 없습니다. 또는 소스를 읽는 도왔습니다. (directabels 내가 시도 먼저 인 ggplot 규모에서 설정 한 레이블 이름을 존중하지 않는 것 같습니다.)ggplot2 + directlabels로 라벨에 맞춤 이름을 사용하는 방법

샘플 코드 :

library("scales") 
library("reshape2") 
library("ggplot2") 
library("directlabels") 

data = data.frame(
    C = c(1.2, 1.4, 0.3, -2.0, 0.5), 
    I = c(1.2, 1.5, -1.3, -3.8, 1.8), 
    G = c(0.2, 0.3, 0.3, 0.2, 0.2), 
    "X-M" = c(2.9, -0.7, 0.3, -2.8, 1.5) + 
      c(-2.7, 0.2, 0.4, 3.6, -2.4), 
    year = c("2006", "2007", "2008", "2009", "2010")) 

p <- ggplot(data = melt(data), aes(year, value, color = variable)) + 
    geom_line(aes(group = variable)) + 
    scale_color_hue(breaks = c("C", "I", "G", "X.M"), 
        labels = c("C", "I", "G", "X-M")) # directlabels doesn't 
                # use this 

# Compare: 
p 

# with: 
direct.label(p, list(last.points, hjust = -0.25)) 

결과 그래프는 here를 볼 수 있습니다. directlabels가있는 것은 "X-M"대신 "X.M"을 사용합니다. 미리 많은 감사드립니다!

+0

+1 재현 예를 들어. 에 오신 것을 환영합니다. – Andrie

답변

3

패키지 directlabels은 데이터의 열 이름에서 레이블을 가져 오는 것으로 보입니다.

즉, 데이터에서 레이블이 정확한지 확인해야합니다. 이렇게하려면, 당신은 당신이 data.frame을 만들 때 check.names=FALSE을 설정해야합니다 :

data = data.frame(
    C = c(1.2, 1.4, 0.3, -2.0, 0.5), 
    I = c(1.2, 1.5, -1.3, -3.8, 1.8), 
    G = c(0.2, 0.3, 0.3, 0.2, 0.2), 
    "X-M" = c(2.9, -0.7, 0.3, -2.8, 1.5) + 
    c(-2.7, 0.2, 0.4, 3.6, -2.4), 
    year = c("2006", "2007", "2008", "2009", "2010"), 
    check.names=FALSE) 

data 
    C I G X-M year 
1 1.2 1.2 0.2 0.2 2006 
2 1.4 1.5 0.3 -0.5 2007 
3 0.3 -1.3 0.3 0.7 2008 
4 -2.0 -3.8 0.2 0.8 2009 
5 0.5 1.8 0.2 -0.9 2010 

지금 줄거리 :

p <- ggplot(data = melt(data), aes(year, value, color = variable)) + 
    geom_line(aes(group = variable)) 
direct.label(p, list(last.points, hjust = -0.25)) 

enter image description here

+0

훌륭하고 완벽하게 작동합니다. 감사합니다 !! data.frame()에서 check.names를 완전히 놓쳤습니다! – Dato

관련 문제