2016-08-12 6 views
0

히스토그램을 만들고 변수의 출력에 가중치를 주려고합니다. 이 예제에서는 ""의 히스토그램에 "금액"가중치를 지정합니다. 이전 게시물을 검색했지만 이것이 내 문제를 해결하지 못하는 것 같습니다. 내가 히스토그램에서 서로 다른 가중치 결과를 예상히스토그램을 가중치하려고 할 때 예기치 않은 ggplot 출력이

1) :

는 내가 해결하기 위해 노력하고이 문제가있다. 나는 "2"값이 막대를 16 %로, "3"값을 막대를 24 %로, "4"값을 막대의 18 %로, "5"값을 42 %의 막대가 있습니다.

2) "0"값이 검은 막대가 100 %와 같은 이유가 막대 그래프에 나타납니다.

불행히도 내가 처음 이라기 때문에 출력물을 게시 할 수 없습니다.

대단히 감사합니다!

library(ggplot2) 

amount <- c(rep(0.02, 50), rep(0.03, 50)) 
value <- c(rep(2, 20), rep(3, 30), rep(4, 15), rep(5, 35)) 
my_df <- data.frame(amount, value) 

xvar <- my_df$value 
weight <- my_df$amount 

histogram <- ggplot(my_df, aes(xvar)) 
histogram <- histogram + geom_histogram(aes(weight)) 
histogram <- histogram + geom_histogram(binwidth=0.25, 
         colour="black", fill="white") 
plot(histogram) 
+2

의도 한 결과에 관계없이 ggplot 코드 자체에는 많은 문제가 있지만, 백업하고 가중치를 묻는 데 도움이됩니다. 값의 20 %는 2입니다. 데이터가 주어지면 그 부분이 나에게 의미가 없기 때문에 어떻게 0.16의 가중치를 얻을 것으로 예상되는지 설명 할 수 있습니까? – joran

+2

... 더 구체적으로 말하자면, 가중치 히스토그램을 원하면 'value'의 히스토그램을 생성하는'ggplot (my_df, aes (x = value, weight = amount)) + geom_histogram() '금액'으로 가중치를 부여합니다. 그러나 그것은 당신이 묘사하는 것을 만들어내는 것처럼 보이지 않으므로, 당신이 실제로 원하는 것을 이해하려고 노력하고 있습니다. – joran

+0

대단히 감사합니다. 조란. 바라기를 나는 이것에 대해 올바른 생각을하고 있습니다. ** 금액 ** = 2.5의 합계. ** 값 ** = 2 인 단일 항목의 경우 퍼센트는 0.02/2.5 = 0.8 %입니다. 따라서 2의 값을 가진 20 개의 항목이 있기 때문에 2의 모든 것은 0.8 % * 20 = 16 %를 나타낼 것입니다. 저는 여기에있는 코드가 작지는 않다는 것을 압니다. 그러나 나는 이렇게 작성했습니다. 그래서 누군가가 각각의 연속적인 코드 행 히스토그램에 할 것입니다. 내가 당신의 코드를 사용했을 때 나는 실제로 사라져 버린 검정색 막대 문제를 겪었습니다. (이전에 이것을 시도했지만 오류가있었습니다 ... 잘못 입력했을 것입니다).가중치가 예상 한 것과 다릅니다. – DaveM

답변

0

좋아, 내가 잘못하고 있었는지 알아 냈 :

다음은 재현 예입니다. Joran에게 다시 한번 감사드립니다. 당신은 여전히 ​​나를 도왔습니다. 나는 내가 y 축의 유닛에 던져 졌다고 생각하고, 아래에 pct을 추가해야만 예상 한 결과를 얻을 수있었습니다.

그 무게는 여기에 대신 "2"(즉, 0.02 * 20 = 0.4 대신하다 총 의 비율의 모든 "2"값을 을 요약 몰랐어요 0.02 * 20/2.5 = 16 %). 그래프 막대는 상대적으로 동일하게 보입니다. 단위는 다릅니다.

필자는 코드를 좀더 콤팩트하게 작성했지만 코드를 더 잘 만들 수있는 팁도 좋아할 것입니다. 여기

내가 원하는 것을 나에게있어 내 수정 된 코드입니다 : 마지막으로

library(ggplot2) 
library(dplyr) 

amount <- c(rep(0.02, 50), rep(0.03, 50)) 
value <- c(rep(2, 20), rep(3, 30), rep(4, 15), rep(5, 35)) 

my_df <- data.frame(amount, value) 
my_df <- my_df %>% 
    mutate(pct = amount/sum(amount)) 

histogram <- ggplot(my_df,aes(x = value, weight = pct)) + 
geom_histogram(binwidth=0.25, colour="black", fill="white") 

plot(histogram) 

, 또한 작동 아래와 같이 나는 체중의 위치를 ​​발견하고 내가 알고하지 않기 때문에 나는이 조금 혼란 찾을 수있다

histogram <- ggplot(my_df,aes(x = value)) + 
geom_histogram(aes(weight = pct), binwidth=0.25, colour="black", fill="white") 
+0

혼란에 대해 : 단일 명령에 대한 aes (과학)는 이전 명령에서 자동으로 상속됩니다. 이렇게하면 특정 레이어가 "이전과 같은 미학이지만 추가 매개 변수 x"를 사용할 수 있습니다. 두 개의 라인 사이에 또 ​​다른 geom_histogram()을 추가하여 어떤 일이 발생하는지보십시오. – AlexR

+0

많은 감사합니다. Alex. – DaveM