我有一个数据框(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))
答案 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列求和。
答案 1 :(得分:1)