我想按照所用植物数量的降序对数据集中的变量进行排名。我尝试在.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个图组合成一个。我该怎么办呢?
答案 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~.)