我有的数据:
与此类似的东西:
name year Var1 Var2 Var3
A 1 0.67 0.97 0.75
A 2 0.19 0.89 0.63
A 3 0.07 0.30 0.95
B 1 0.05 0.66 0.94
B 2 0.43 0.27 0.51
B 3 0.63 0.42 0.13
C 1 0.03 0.26 0.18
C 2 0.70 0.24 0.09
C 3 0.06 0.83 0.03
D 1 0.40 0.16 0.27
D 2 0.10 0.80 0.17
D 3 0.57 0.10 0.78
E 1 0.07 0.66 0.63
E 2 0.00 0.02 0.90
E 3 0.91 0.54 0.17
我想做什么:
在x轴上带有变量“name”的堆积条形图 . 条形应代表所有可用年份的var1-3的平均值 . 最后,X轴应该排名,左边的堆叠条较低,右边的堆叠条较高 .
它应该如何:
Average Var1 Var2 Var3 Total (var1-3)
A 0.31 0.72 0.78 1.81
B 0.37 0.45 0.53 1.35
C 0.26 0.44 0.10 0.81
D 0.36 0.35 0.41 1.12
E 0.33 0.41 0.57 1.30
我做了什么:
我认为这个任务意味着许多步骤,而且我已经过了一天半的混乱 .
我试图对数据进行排名,创建一个总变量 [total = var1+ var2 + var3]
. 我使用融合功能将数据从宽格式转换为长格式 .
longdata <- melt(widedata, id.vars = c("name","year", "total")
尝试排名:
longdata <- transform(longdata, name = reorder(name, total))
并绘制它(悲惨地失败):
ggplot(longdata, aes(x=name, y=longdata$value, fill=factor(variable))) + geom_bar(stat="identity")
1 回答
您可以使用例如
dplyr
包来汇总数据,然后重新绘制它:给出:
您还可以将这些条彼此相邻放置(这样您可以更好地将它们相互比较):
给出: