R - 图例 ggplot 的顺序

R - order of legend ggplot

我有以下数据框:

Author<-c("University","Office", "School","University","Office", "School","University","Office", "School")
Typ<-c("Text", "Text", "Text","Data", "Data","Data",  "List", "List", "List")
Number<-c("3","1","6","4","4","2","8","1","1")
df<-data.frame(Typ,Author,Number)

如果我申请:

ggplot(df, aes(x=Author, y=Number, fill=Typ)) +
  geom_bar(stat='identity') + coord_flip()

然后我得到一个堆积条形图,其中条形是按日期框架顺序排列的,即 TextDataList,但图例是按字母顺序排列的命令。是否有任何(非蛮力,即手动)选项,以便我也可以按照 df 的 "given" 顺序重新排列图例,即 TextDataList?

(只是为了澄清 - 我有一堆这样的数据帧,它们也更大,因为向量 "Typ"(在每个数据帧中也不同)有更多的条目,其顺序应该不会被改变,也显示在图例中。我写了一个例程来绘制所有这些数据框,所以我不能手动更改图例 - 我真的在寻找一个例程友好的解决方案)

您可以根据它们在 data.frame 中的显示顺序自动设置级别:

df$Typ <- factor(df$Typ, levels = unique(df$Typ))
ggplot(df, aes(x=Author, y=Number, fill=Typ)) +
        geom_bar(stat='identity') + coord_flip()

通过这种方式,您可以根据 df$Typ 中的顺序更改 factor 的顺序: