![](/img/trans.png)
[英]R plotly show only labels in the stacked bar chart where percentage value for the stack is above 5
[英]R: Percentage stack bar chart in 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
我尝试了以下代码,但所需的输出未显示为百分比堆栈条形图。
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")
我在R中无法找到这种图表的答案,请问有人可以帮助我吗?
以下代码为您提供了您所描述的情节,在悬停文本中每个城市的类型总数(成人/儿童/婴儿)(如果您还希望在情节本身上尝试添加,请尝试add_annotations)
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")
由于您希望跨“城市”而不是“ House_Unit_Id”的堆叠百分比条形图,您可以做两件事。 要么使用您现在拥有的比例,要么创建堆叠和分组条形图的组合,然后在其中按House_Unit_Id进行堆叠,然后按City进行分组。 目前,我认为plotly软件包(如果我做错了,请纠正我)不能做到这一点。 您可以使用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")
如果您按城市汇总计数数据并计算每个城市的比例,这将起作用。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.