2014-04-23 155 views
1

我想按照所用植物数量的降序对我的数据集中的变量进行排序。我试着在.csv中排名,然后在R中输出。但即使如此,这个图并没有按照要求的顺序排列。这里是我的数据集按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个情节合并为一个。我该怎么办?

回答

5

之所以发生这种情况是ggplot地块变量x是在因素基础值的排序(回想起因子被存储为封面下方的数字)。如果你要绘制它们以交替的次序,你应该绘制

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

是公平的,我认为以下@保罗Hiemstra的答案是更好(使用重排的更干净)前更改级别的顺序。我会建议拒绝并接受他的。 – JPC

+0

+1你的解决方案是完全有效的,所以接受是好的。 –

+0

好,谢谢你好先生 – JPC

3

关键是要重新排序Lepidoptera.Family因素,默认情况下是按字母顺序排列的levels

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