2016-06-07 6 views
1

내 데이터 프레임이 하나입니다ggplot2에서 수평 및 수직 누적 막대를 사용하여 막대 그래프를 만드는 방법은 무엇입니까?

data <- data.frame("GROUP"= c(1,1,1,1,1,1,1,1,2,2,2,2,2,2,2,2,3,3,3,3,3,3,3,3), "C1_PERCENTAGE" = c(0, 10 ,22, 34, 37, 18, 24, 13), "C2_PERCENTAGE"=c(0, 8, 20, 24, 23, 11, 18, 9)) 

내가 수평 바의 세 그룹이 될 수 있도록 수평 GROUP에 따라 스택 막대와 막대 그래프를 생성합니다. 수직으로, 나는 막대기를 C1_PERCENTAGEC2_PERCENTAGE에 기반하여 쌓고 싶습니다.

ggplot2를 사용하고 싶습니다. 기본 그래픽을 사용했지만 이것은 C1_PERCENTAGE에만 해당됩니다.

barplot(data$C1_PERCENTAGE, col = as.factor(data$GROUP) 

enter image description here

C1_PERCENTAGE에 대한 플롯을 제공합니다. C2_PERCENTAGE도이 막대 옆에 있습니다.

+0

이 아닌 [플롯 타일]는 (http://docs.ggplot2.org/current/geom_tile.html)? – zx8754

+0

아마도 'barplot ("colnames <-"(t (data) [- 1,], data [, 1]), 옆에 = TRUE)' – akrun

+0

[ggplot2 - Stacked Bar Chart]의 가능한 복제본 (http : // stackoverflow .com/questions/21236229/ggplot2-stacked-bar-chart) – theArun

답변

2

두 가지 변형이 있습니다.

먼저 데이터를 준비하고 (id), (b) 긴 형식으로 재 형성해야합니다.

데이터

library(data.table) 
d <- data.table(
    "id" = 1:24, 
    "GROUP" = c(1,1,1,1,1,1,1,1,2,2,2,2,2,2,2,2,3,3,3,3,3,3,3,3), 
    "C1_PERCENTAGE" = c(0, 10 ,22, 34, 37, 18, 24, 13), 
    "C2_PERCENTAGE"=c(0, 8, 20, 24, 23, 11, 18, 9) 
) 
ld <- melt(d, id.vars = c("id", "GROUP")) 

누적 막대 그래프

library(ggplot2) 
ggplot(ld, aes(x = id, y = value, fill = variable)) + 
    geom_bar(stat = "identity", position = "stack") 

enter image description here

각면 막대 차트

0,123,516 준비
ggplot(ld, aes(x = id, y = value, fill = factor(GROUP))) + 
    geom_bar(stat = "identity", position = "stack") + 
    facet_wrap(~ variable, ncol = 1) 

enter image description here

+0

@technOslerphile 제 답변을 수락 해 주셔서 감사합니다. - 두 가지 변종 중 어느 것이 마침내 귀하의 질문에 답을했는지/귀하의 요구 사항을 충족 시켰습니까? 고맙습니다. – Uwe

+0

그래프와 일치하도록면 처리 된 막 대형 차트의 코드를 편집하지 않았습니다. – Uwe