基于ggplot2(R)中的变量对Y轴进行排序

时间:2015-08-29 17:21:18

标签: r ggplot2 reshape2

我有一个数据集我在ggplot2中构建堆积条形图。每个观察(寿命)位于y轴上,条形图与x轴值平行延伸。但是,我想根据与x轴值(地球,风,火和水)无关的排名对这些变量进行排名,但是要从另一个数据集合并。 主要数据:

Life    Earth   Wind    Fire       Water    
A      2.72    1.22    0.860220476  2.86    
B      2.11    1       0.660225123  2.26    
C      0.67    0.31    0.1900664    0.69    

排名数据:

Life Rank
A     3
B     1
C     2

我正在寻找生活B" Bar"位于y轴的顶部,而生命A" Bar"在底部。默认值只是按字母顺序排列。我如何订购这些,以便Rank 1栏位于顶部,Rank 3位于底部?

这是我的代码:

require(reshape2)
require(ggplot2)
bars1 <- read.csv("Renown.csv",header=T,skip = 0,stringsAsFactors=FALSE)
Rank <- read.csv("Rank.csv",header=T,skip = 0,stringsAsFactors=FALSE)
bars1 <- aggregate(.~Lifestyle, data=bars1, FUN=mean)
bars1 <- melt(bars1, id.vars = "Life")
bars1 <- merge(bars1, Rank, by="Life")
bars1 <- ggplot(bars1, aes(x = Life, y = value , fill=variable)) + geom_bar(stat='identity')  + coord_flip()

谢谢!

1 个答案:

答案 0 :(得分:1)

您需要将Life转换为基于Rank

的排序系数
bars1$Life = factor(bars1$Life, levels = Rank[order(-Rank$Rank),]$Life)

enter image description here