比例堆积条形图,计算R中因子的堆栈百分比

时间:2017-10-03 19:17:25

标签: r ggplot2 bar-chart

我有一个数据框(Df1),其中包含两个因子类变量:Site和Car。我想要一个按比例堆叠的条形图,它显示每个站点所有汽车的旧百分比和新百分比。我希望图表与make成比例,以便在站点之间轻松进行比较。

我想要的图表看起来很像下面的输出,但我喜欢yaxis = Site,xaxis =所有汽车的总和(100%),fill = Car。

起点(df):

Df1 <- data.frame(Site=c("GA","CA","NY","CA","NY","CA"),Car=c("new","new","new","old","old","new"))

期望的输出:

library(gcookbook)
library(plyr)
ce = ddply(cabbage_exp, "Date", mutate, percent_weight = Weight/sum(Weight) * 100)
ggplot(ce, aes(x=Date, y=percent_weight, fill=Cultivar)) + 
geom_bar(stat='identity')

我的尝试:

library(plyr)
Df2 <- ddply(Df1,"Site",transform,
PercentCar = count(Car)/sum(count(Car))*100)
ggplot <- (Df2, aes(x=PercentCar, y=Site,fill=Car))  

2 个答案:

答案 0 :(得分:1)

我使用dplyr group_by而不是plyr来处理数据。

library(dplyr)
Df1 <- data.frame(Site=c("GA","CA","NY","CA","NY","CA"),
                  Car=c("new","new","new","old","old","new"))
Df2 <- Df1 %>%
    group_by(Site, Car) %>%
    count() %>%
    ungroup() %>%
    mutate(prop = n/sum(n))

ggplot(Df2, aes(x = Site, y = prop, fill = Car)) +
    geom_bar(stat = "identity") +
    coord_flip()

接下来发生了什么:我将Site和Car分组,以便两个变量都保留在数据中,以便count()函数区分CA中的旧车和CA中的新车。然后我取消组合,这样当我在mutate()中创建新的prop列时,&#39; sum(n)&#39; bit将整个列相加,而不是仅对每个组中的n列求和。

enter image description here

答案 1 :(得分:1)

基础R解决方案。

## Some test data
Site = sample(1:3, 20, replace=TRUE)
Car  = sample(c("Old", "New"), 20, replace=TRUE)

T1 = table(Site, Car)
Prop1 = T1/rowSums(T1)
barplot(t(Prop1), horiz=TRUE, col=rainbow(2))

Proportional barplots

相关问题