2014-07-24 2 views
2

홀수 비율의 막대 그래프를 만들려고합니다. 해석 적으로, 그들은 0이 아닌 1을 중심으로 배치됩니다. 따라서 1보다 작은 값이 "음수"이고 1보다 큰 값이 "양수"인 막대 그래프를 원합니다 (즉, 1에서 거리의 그래프). y 축에 레이블이 나는이 그래프 레이블링되지 만들려는 0이 아닌0이 아닌 값을 중심으로 음수 값과 양수 값이있는 막대 그래프

the plot

, 일을 중심으로해야한다는 점을 제외

효과적으로 그래프는 다음과 같은 플롯과 같아야합니다 실제로 y 축의 중심에 위치시킴으로써 가능합니다. 그렇다면 어떻게? 과 같이, 1을 추가

data <- matrix(c(rnorm(5, 1, .5)), 5, 1) 
data <- as.data.frame(data) 
data[,2] <- data[,1] - .1 
data[,3] <- data[,1] + .1 
data <- cbind(c(letters[1:5]), data) 
names(data) <- c("Category", "OR", "Lower", "Upper") 

data.zero <- cbind("Category"=data[,1], data[,2:4] - 1) 

require(ggplot2) 
ggplot() + 
    geom_bar(data = data.zero, aes(x=Category, y=OR, fill=Category), stat = "identity") + 
    scale_fill_brewer(type = "seq", palette = 1) + 
    geom_errorbar(aes(x=Category, y=OR, ymin=Lower, ymax=Upper), 
      width=.1, position=position_dodge(), data=data.zero) 

답변

1

간단한 함수를 정의 :

코드 예제 그래프를 만들 수

plus1_formatter <- function(x) {x +1} 

를하고 문자열을

+ scale_y_continuous(labels=plus1_formatter) 

을 추가하는 것보다 당신 위의 ggplot 명령. 이 enter image description here

0

내가 제대로 질문을 이해한다면 당신이 원하는, y 축 레이블을 다시 지정하지 않으 : before changing the labels

후 :

seed(123)

전에 그것을 재현 세트를 만들려면 그 중심에 1을 둔다.

## Find the minimum and maximum y 
mi <- min(data.zero$Lower) 
ma <- max(data.zero$Upper) 

이제 거리가 1에서 mi 또는 1에서 ma까지 더 큰지 확인합니다. 코드와

+ ylim(newylim) 

줄거리는 왼쪽에, 오른쪽에 ylim를 추가 : 나는 당신이 추가 플롯 할 수 있습니다

if(1 - mi > ma - 1) { 
    newylim <- c(mi , 2 - mi) ## Lower limit remains same, Upper limit is increased 
} else { 
    newylim <- c(2 - ma, ma) ## Upper limit remains same, Lower limit is decreased 
} 

1에서 작은 거리를 증가시켜 ylim을 설정합니다.

enter image description here

이, 희망이 도움이

알렉스

관련 문제