2016-09-02 5 views
-1

데이터 프레임이 있는데 두 개의 범주 형 변수 유형 및 위치 유형 간 관계에 관심이 있습니다. 유형은 5 개 수준이고 위치는 20 개 수준입니다.두 가지 범주 형 변수의 R 막대 그래프

각 위치의 유형 백분율을 플롯하려고합니다. ggplot2을 사용하여 간결한 방법이 있는지 알고 싶습니까? 더 구체적인 예 :

df 
    gender beverage 
1 Female  coke 
2 Male  bear 
3 Male  coke 
4 Female  bear 
5 Male  tea 
6 Male  bear 
7 Female water 
8 Female  tea 
9 Female  bear 
10 Male  tea 
x 축에서 변수 내 경우

는 그래서는 공간 문제로 실행하고 20 레벨을 가지고, 어떤 도움

편집

을 감상 할 수있다

나는 각 음료의 성별 현명한 백분율을 그려보고 싶다. 예 : 차가 2 개이고 남성 1 개가 여성이므로 남성 %는 66.67, 여성 백분율은 33.33 이다. 그러므로 x 축에서 거기 차 y = 66.67의 두 개의 수컷과 y = 33.33의 수컷이어야합니다.

+0

확률이 훨씬 높을 것이다 (http://stackoverflow.com/questions/5963269). – Axeman

+0

글쎄 내 자신의 데이터가 꽤 크고 내가 제공 한 그래프에 대한 데이터가 없기 때문에 어떤 종류의 예제가 도움이 될지 명확히 할 수 있다면 원하는 것을 이해할 수있는 음모가 아닌가? 끝난? –

+0

데이터의 발췌 부분이나 임의의 데이터로 구성된 일부 또는 내장 된 데이터 집합 (게시 한 링크 읽기)을 사용하십시오. 또한 사전 처리를 통해 수행 할 수 있다면 실제로 코드를 표시하는 것이 유용 할 것입니다. – Axeman

답변

2

성별로 백분율을 별도로 계산해야하기 때문에 가장 쉬운 방법은 전처리하는 것입니다. complete을 사용하여 data.frame에 명시 적으로 0 % 막대가 있는지 확인하십시오. 그렇지 않으면 ggplot은 해당 막대를 무시하고 다른 성 막대를 넓 힙니다.

library(dplyr) 
library(tidyr) 
df2 <- df %>% 
    group_by(gender, beverage) %>% 
    tally() %>% 
    complete(beverage, fill = list(n = 0)) %>% 
    mutate(percentage = n/sum(n) * 100) 

ggplot(df2, aes(beverage, percentage, fill = gender)) + 
    geom_bar(stat = 'identity', position = 'dodge') + 
    theme_bw() 

enter image description here

또는 다른 방법으로 주위 : 당신이 [좋은 예]를 포함 할 경우 유용한 답변을 얻기의

df3 <- df %>% 
    group_by(beverage, gender) %>% 
    tally() %>% 
    complete(gender, fill = list(n = 0)) %>% 
    mutate(percentage = n/sum(n) * 100) 

ggplot(df3, aes(beverage, percentage, fill = gender)) + 
    geom_bar(stat = 'identity', position = 'dodge') + 
    theme_bw() 

enter image description here

+0

+1입니다. 하지만 실제로 이것은 내가 원하는 비율이 아니에요, 당신의 음모는 남성의 20 %가 차 마시는 사람이라고 말하고 싶습니다. 차를 마시는 사람의 66.67 %는 남성입니다. 차를 마시는 남성 수/차 마시는 사람 * 100 , 이것이 더 어려워 보이기 때문에 어떻게해야합니까? –

+0

왜 더 이상 어렵지? 'group_by'에서'음료수'와'성별'을 교환하고'완성품'에서'음료수'를'성별'로 바꾸면됩니다. – Axeman

관련 문제