我有以下示例数据,其中包含三种不同的费用类型和一个年度列:
library(tidyverse)
# Sample data
costsA <- sample(100:200,30, replace=T)
costsB <- sample(100:140,30, replace=T)
costsC <- sample(20:20,30, replace=T)
year <- sample(c("2000", "2010", "2030"), 30, replace=T)
df <- data.frame(costsA, costsB, costsC, year)
我的目标是将这些成本绘制在堆积的条形图中,以便我可以比较三年类别之间的平均成本。为此,我汇总了这些值:
df %>% group_by(year) %>%
summarise(n=n(),
meanA = mean(costsA),
meanB = mean(costsB),
meanC = mean(costsC)) %>%
ggplot( ... ) + geom_bar()
但是我现在该如何绘制图形?在x轴上应该是年份,在y轴上应该是堆积的成本。
答案 0 :(得分:1)
您必须将汇总数据整理成整齐的(-ish)格式,以生成类似您发布的图的图。在整洁的诗歌中,您可以使用gather
函数,将多列转换为键值对的两列。例如,以下代码生成下图。
df %>% group_by(year) %>%
summarise(n=n(),
meanA = mean(costsA),
meanB = mean(costsB),
meanC = mean(costsC)) %>%
gather("key", "value", - c(year, n)) %>%
ggplot(aes(x = year, y = value, group = key, fill = key)) + geom_col()
对于gather("key", "value", - c(year, n))
,将三列(costA,costsB,costsC)更改为键值对。