在R中按降序排列

时间:2014-04-23 17:29:19

标签: r ggplot2

我想按照所用植物数量的降序对数据集中的变量进行排名。我尝试在.csv中排名,然后在R中导出。但即使这样,情节也没有按要求的顺序排列。这是我的数据集

df <- structure(list(Lepidoptera.Family = structure(c(3L, 2L, 5L, 1L, 4L, 6L), 
   .Label = c("Hesperiidae", "Lycaenidae", "Nymphalidae", "Papilionidae", "Pieridae","Riodinidae"), class = "factor"),
           LHP.Families = c(55L, 55L, 15L, 14L, 13L, 1L)), 
    .Names = c("Lepidoptera.Family", "LHP.Families"), 
    class = "data.frame", row.names = c(NA, -6L))

library(ggplot2)
library(reshape2)

gg <- melt(df,id="Lepidoptera.Family", value.name="LHP.Families", variable.name="Type")

ggplot(gg, aes(x=Lepidoptera.Family, y=LHP.Families, fill=Type))+ 
       geom_bar(stat="identity")+
      coord_flip()+facet_grid(Type~.)

我如何按降序排列?此外,我想将3个图组合成一个。我该怎么办呢?

2 个答案:

答案 0 :(得分:5)

发生这种情况的原因是ggplot绘制了x变量,这些变量是基础值排序的因素(回想一下,因子存储为封面下的数字)。如果要以其他顺序绘制图形,则应在绘制之前更改级别的顺序

gg$Lepidoptera.Family<-with(gg, 
                     factor(Lepidoptera.Family, 
                            levels=Lepidoptera.Family[order(LHP.Families)]))

答案 1 :(得分:3)

诀窍是重新排序levels因子的Lepidoptera.Family,默认情况下是按字母顺序排列的:

df = within(df, {
    factor(Lepidoptera.Family, levels = reorder(Lepidoptera.Family, LHP.Families))
})

gg <- melt(df,id="Lepidoptera.Family", value.name="LHP.Families", variable.name="Type")
ggplot(gg, aes(x=Lepidoptera.Family, y=LHP.Families, fill=Type))+ geom_bar(stat="identity")+ coord_flip()+facet_grid(Type~.)

enter image description here