2011-08-23 3 views
4


나는 R/gplot2와 오즈 비율을 비교하려고하고 있는데 X 축 레이블 아래 또는 옆에 두 개의 화살표를 추가하고 싶습니다. 하나는 왼쪽을 가리키고, 하나는 오른쪽을 가리키며, 감소/증가하는 영향을 나타냅니다. 나는 geom_path, geom_line과 같은 많은 것들을 시도했지만 큰 성공을 거두지 못했습니다. 이 내 코드이다R & gplot2 : 축 레이블 아래에서 화살표를 얻는 방법?

forest <- function(d, xlab="Odds Ratio", ylab="Influencing variables"){ 
require(ggplot2) 
p <- ggplot(d, aes(x=ordered(x, levels=rev(x)), y=y, ymin=ylo, ymax=yhi)) + 
geom_pointrange() + 
geom_segment(aes(x = 0, xend = 0, y= 1, yend= 2)) + 
coord_flip() + 
geom_hline(aes(yintercept=1), lty=2) + 
ylab(xlab) + 
xlab(ylab) + 
scale_y_log10() 
return(p) 
} 
##Test Data 
data <- data.frame(x = c("A","B","C","D","E","F","G","H","I"), 
       y = c(1.782,0.136,0.978,0.645,0.518,1.474,0.855,0.673,0.369)) 
data <- transform(data, ylo = (0.719,0.046,0.945,0.295,0.188,0.577,0.407,0.310,0.145), 
     yhi = c(4.420,0.398,1.012,1.411,1.424,3.768,1.798,1.460,0.940)) 
forest(data) 

geom_line 같이 줄을 추가 (AES (X = 1), 화살표 = 화살표 (길이 = 수단 (0.15, "cm")), 컬러 = "블랙"크기 = 1) 화살표를 가져 오지만 원래 데이터와 충돌합니다.
미리 솔루션, 도움 또는 힌트를 보내 주셔서 감사합니다!
마크

답변

2

나는 당신이 당신의 데이터의 일부 또는 화살표를 만드는 시도 여부, geom_segment으로 시도하고 있었는지 확실하지 않다 당신이 정확하게 원하는 일에 대해 추측을 조금하고 있어요 . 나는 위치의 대부분을 하드 코딩

#Your test data, with a small typo repaired 
dd <- data.frame(x = c("A","B","C","D","E","F","G","H","I"), 
       y = c(1.782,0.136,0.978,0.645,0.518,1.474,0.855,0.673,0.369)) 
dd <- transform(dd, ylo = c(0.719,0.046,0.945,0.295,0.188,0.577,0.407,0.310,0.145), 
     yhi = c(4.420,0.398,1.012,1.411,1.424,3.768,1.798,1.460,0.940)) 

#Create a separate data frame for the arrow labels 
arrowLab <- data.frame(lab = c("Increasing","Decreasing"), 
         x = c(0.15,0.15),y = c(10^0.25,10^(-0.25))) 

ggplot(data = dd, aes(x=ordered(x, levels=rev(x)), y=y)) + 
     geom_pointrange(aes(ymin=ylo, ymax=yhi)) + 
     geom_segment(aes(x = 0, xend = 0, y= 1, yend= 2), 
         arrow=arrow(length=unit(0.2,"cm"))) + 
     geom_segment(aes(x = 0, xend = 0, y= 1, yend= 10^(-0.25)), 
         arrow=arrow(length=unit(0.2,"cm"))) + 
     geom_text(data = arrowLab,aes(x=x,y=y,label = lab),size = 3) + 
     coord_flip() + 
     geom_hline(aes(yintercept=1), lty=2) + 
     scale_y_log10() 

enter image description here

주를, 그래서 당신은 얻을 해당 값과 수리를 할 가능성이 있습니다 :하지만 당신은 당신이 무엇을 설명 같은 것을 얻을 수 geom_segment에 구축 할 수 있습니다 원하는 것을 선택하거나 데이터를 기반으로 프로그래밍 방식으로 선택할 수 있습니다.

+0

감사합니다! 그게 내가 원하는 것에 더 가까이 다가 갈 수있게 해준다. 내 의도는 "y"아래에이 두 개의 화살표를 그렸다. 그러나 이것으로 충분할 수도 있습니다. – Marc

+0

@Marc - 플로팅 영역 밖에서 물건을 그리는 것은 기술적으로 가능하지만 복잡합니다. 그리드 패키지와 뷰포트를 사용해야합니다. 종종 사람들에게 이렇게 비정상적인 사용자 지정 주석은 Illustrator와 같은 이미지 편집기 또는 그 밖의 다른 기능을 사용하여 이미지를 수정하는 것이 더 빠르고 쉽습니다. – joran

5

이것은 꽤 오래된 게시물이지만, 이것에 비틀 거린 사람을위한 또 다른 옵션을 공유 할 것이라고 생각했습니다.

필자는 플로팅 영역 외부에 화살표가 있어야하고 (grid은 상관하지 않음) 상황이 있습니다. 표현과 기호를 사용하여, 아래와 같이하면 일부 사람들에게 좋은 선택이 될 수 있습니다 :

p1 <- qplot(x = 0:12, y = 0:12, geom = "blank") 
p1 <- p1 + ylab(expression(symbol('\256'))) 
p1 <- p1 + xlab(expression(symbol('\256'))) 
p1 <- p1 + theme(axis.title.y = element_text(size = 30)) 
p1 <- p1 + theme(axis.title.x = element_text(size = 30)) 

p1 

enter image description here

테마 수정이 절대적으로 필요하지 않습니다하지만 당신은 아마 적어도 화살표의 크기를 증가 할 것이다 약간. , 당신은 라벨에 텍스트를 추가하려면 http://goo.gl/vRzpJU

가 (단지 표현에 추가 아마 너무 큰 만들 것입니다) : 기본적으로

symbol() 함수는이 문서에서 윤곽 있습니다 어도비 기호 코드 소요 당신에게 가야 다음은 시작 :

grid.text(label="X", x = 0.645, y = 0.02) 
grid.text(label="Y", x = 0.1, y = 0.5, rot=90) 
grid.gedit("GRID.text", gp=gpar(fontsize=15)) 
3

이 쉽게 R expression(x <-> y)에서 수학 주석을 사용하여 수행 할 수 있습니다. 사용 가능한 옵션 테이블은 here입니다. expression 또한 수학 기호와 같은 라텍스를 허용합니다. 당신의 도움에 대한

p1 <- qplot(x = 1:10, y = 1:10, geom = "blank") 
p1 <- p1 + xlab(expression(decreasing %<->% increasing)) 
p1 <- p1 + ylab(expression(down %->% up)) 
p1 <- p1 + ggtitle(expression("Darcy's law" %->% q == -k*frac(Delta*h,Delta*l))) 
p1 <- p1 + theme_bw(base_size=14) 

Including arrows in plot labels

관련 문제