2014-10-28 2 views
4

나는 분포를 보여주기 위해 내 데이터의 히스토그램을 플로팅하고 싶지만 대부분의 값인 <1.00에 비해 매우 높은 몇 가지 아웃 라이어가 있습니다. 그래프의 맨 오른쪽까지 하나 또는 두 개의 막대를 표시 한 다음 그래프의 맨 오른쪽까지 아무것도 표시하지 않고 을 제외하고 모두 막대 그래프를 갖고 싶습니다. 끝 부분에 막대를 추가 한 후 그 밑에있는 라벨은 "> 100 %"입니다. 내가 할 수있는이 같은 ggplot2 사용 geom_bar()와 :ggplot2를 사용하여 마지막 막대가 일부 값보다 큰 모든 값의 개수 인 막대 그래프 또는 막대 그래프를 만들 수 있습니까?

X <- c(rnorm(1000, mean = 0.5, sd = 0.2), 
    rnorm(10, mean = 10, sd = 0.5)) 
Data <- data.frame(table(cut(X, breaks=c(seq(0,1, by=0.05), max(X))))) 

library(ggplot2) 
ggplot(Data, aes(x = Var1, y = Freq)) + geom_bar(stat = "identity") + 
    scale_x_discrete(labels = paste0(c(seq(5,100, by = 5), ">100"), "%")) 

histogram 문제는 크기 나 레이블이 중복 또는에 대한 각도로 그릴 수 필요가 결국이 될 필요가 있다는 것입니다 가독성. 나는 모든 표시 줄을 정말로 필요로하지 않는다. 어떤 방법이 있나요에 하나

    내가 수동으로 마지막 줄이나
  • B를 추가 할 필요가 없도록) geom_bar (이외의 다른 방식으로
  • A) 플롯이)만을 바의 일부 레이블 ?
+0

'+ coord_flip()'을 추가하는 방법은 무엇입니까? – rawr

답변

1

내가 B.

당신은 B를 할 수 있도록 것입니다)하지만 당신은 수동으로 당신을 위해 할 수있는 함수를 정의 할 수있는 매개 변수가있는 경우 나도 몰라 답을하려고합니다. 즉 :

library(ggplot2) 
X <- c(rnorm(1000, mean = 0.5, sd = 0.2), 
     rnorm(10, mean = 10, sd = 0.5)) 
Data <- data.frame(table(cut(X, breaks=c(seq(0,1, by=0.05), max(X))))) 

#the function will remove one label every n labels 
remove_elem <- function(x,n) { 
    for (i in (1:length(x))) { 
    if (i %% n == 0) {x[i]<-''} 
    } 
    return(x) 
} 

#make inital labels outside ggplot (same way as before). 
labels <-paste0(c(seq(5,100, by = 5),'>100'),'%') 

이제 ggplot의 함수 내에서 그 기능을 사용하여 :

ggplot(Data, aes(x = Var1, y = Freq)) + geom_bar(stat = "identity") + 
    scale_x_discrete(labels = remove_elem(labels,2)) 

출력 :

enter image description here

이 당신을 위해 무엇을 찾고있는 경우 나도 몰라하지만 그건 속임수 야!

+0

해킹 비트이지만 괜찮습니다. 그것은 일을하므로, 고마워요! – LauraS

+0

도와 드리겠습니다 :)! – LyzandeR

관련 문제