2016-11-26 2 views
0

의 비율 스택 막대 차트 내가 가진 R : plotly

City<-c("X","Y","Z","X","Z","X","Y") 
House_Unit_Id<-c("H1","H2","H3","H4","H5","H6","H7") 
Adult<-c(50,100,60,40,50,80,60) 
Child<-c(40,0,40,20,50,20,30) 
Baby<-c(10,0,0,40,0,0,10) 
data<-data.frame(City,House_Unit_Id,Adult,Child,Baby) 

City House_Unit_Id Adult Child Baby 
    X  H1   50  40  10 
    Y  H2  100  0  0 
    Z  H3   60  40  0 
    X  H4   40  20  40 
    Z  H5   50  50  0 
    X  H6   80  20  0 
    Y  H7   60  30  10 

가 나는 아래의 코드를 시도했지만 필요한 출력이 아닌 What I need

아래 같은 비율 컬럼 스택 차트를 필요로 아래 같은 데이터 세트 비율 스택 막대 차트로 나타납니다.

Chart <- plot_ly(data,x = ~City, y = ~Adult, type = 'bar',name= 'Adult') %>% 
    add_trace(y = ~Child, name = 'Child') %>% 
    add_trace(y = ~Baby, name = 'Baby') %>% 
    layout(yaxis = list(title = 'Percentage (%)'),barmode = "stack") 

이 내가 현재 무엇을 얻을 What I currently get

나는 사람이 좀 도와 주시겠습니까 R.에서 plotly 패키지에 대한 차트이 유형에 대한 답을 찾을 수 없습니다

?

+0

[플롯 북] (https://cpsievert.github.io/plotly_book/bars-histograms.html)의 그림 2.24. 설명서를 읽으려고 했습니까? 또한 플롯으로 사용하는 열은 사용자가 제공 한 데이터에 없습니다. 실제 데이터의'dput '을 추가하십시오. – dww

답변

1

다음 코드는 (당신은 또한 플롯 자체에 원하는 경우 add_annotations을 시도 할 수 있습니다)

당신에게 hovertext의 각 도시에서 유형의 총 수 (성인/어린이/아기)와 당신이 설명하는 플롯을 제공합니다
City<-c("X","Y","Z","X","Z","X","Y") 
    House_Unit_Id<-c("H1","H2","H3","H4","H5","H6","H7") 
    Adult<-c(50,100,60,40,50,80,60) 
    Child<-c(40,0,40,20,50,20,30) 
    Baby<-c(10,0,0,40,0,0,10) 
    data<-data.frame(City,House_Unit_Id,Adult,Child,Baby) 

    library(plyr) 
    # Changing the data frame before plotting ... there is propably an easier way to do this! 
    newdata <- ldply(3:5,function(n){tempdata <- data[,c(1,n)] 
           colnames(tempdata)[2] <- "Number" 
           tempdata$type <- colnames(data[n]) 
           return(tempdata)}) 
    newdata <- ddply(newdata,.(City,type),summarize,Number=sum(Number)) 
    # Total for each city 
    datatotal <- ddply(newdata,~City,summarize,n=sum(Number)) 
    # Merge the data frames together 
    newdata <- merge(newdata,datatotal) 
    # Calc the percentages 
    newdata$perc <- newdata$Number/newdata$n 

plot_ly(newdata,x = ~City, y = ~perc*100, type = 'bar',color = ~type,text=~Number,hoverinfo = 'text') %>% 
    layout(yaxis = list(title = 'Percentage (%)'),barmode = "stack") 
0

"City_"가 아닌 "City_Unit_Id"에 가로 세로 비율의 막대 그래프를 표시하려면 할 수있는 두 가지 작업이 필요합니다. 지금 사용하고있는 비율을 사용하고 House_Unit_Id로 스태킹하고 City별로 그룹화하는 스택 및 그룹 바 plot의 조합을 만듭니다. 현재, 나는 음모가 꾸며진 패키지 (내가 틀렸다면 정정해라.)가 이것을 할 수 있다고 생각하지 않는다. ggplot을 사용하여이를 수행 할 수 있습니다.

newData = aggregate(. ~ City, data = data, FUN = sum) 

그런 다음 도시에 의해 비율을 를 계산 : 당신이 정말로 단지 도시를 가로 질러 비율을 비교하려면

그러나,이 같은으로 카운트에게 성인, 어린이와 아기의를 집계한다 . 그 후에 각 도시에 대해 누적 막대로 백분율을 표시 할 수 있습니다.

Chart <- plot_ly(newData, x = ~City, y = ~Adult, type = 'bar', name= 'Adult') %>% 
    add_trace(y = ~Child, name = 'Child') %>% 
    add_trace(y = ~Baby, name = 'Baby') %>% 
    layout(yaxis = list(title = 'Percentage (%)'), barmode = "stack") 

이것은 당신이 당신의 카운트를 도시로 데이터를 집계하는 경우 작업 및 각 도시에 대한 비율을 계산합니다.

+0

@ useR- 안녕하세요, 샘플 데이터가 혼란스러워서 죄송합니다. 내가 정말로 필요로하는 것은 각 가정에 성인, 자녀, 아기 비율을 계산했다는 것입니다. 그래서 행 별 합이 100입니다. 비교를 위해시 전역에 스택 막대 그래프가 필요합니다. – Jessie

+0

@Jessie Ok. 따라서 "House_Unit_Id"는 귀하의 질문에서 빠뜨린 매우 중요한 정보입니다. – useR