【发布时间】:2017-07-18 17:37:09
【问题描述】:
我有一个 data.frame,其中包含以下几个因素:
df<-data.frame(Var1=as.factor(sample(c("AB", "BC", "CD", "DE", "EF"), 1000, replace=TRUE)))
与
summary(df$Var1)
AB BC CD DE EF
209 195 178 221 197
我想在 data.frame 中绘制每个因素的水平频率如下:
ggplot(df, aes(x=factor(1), fill=factor(Var1)))+
geom_bar(width=1, colour="black")+
coord_polar(theta="y")+
theme_void()
但是,级别的顺序是按字母顺序排列的,而不是按频率排列的。使用 library(plyr) 中的 count 我可以创建一个新的 data.frame,它可以为我提供每个级别的频率:
df_count <-count(df, "Var1")
Var1 freq
1 AB 209
2 BC 195
3 CD 178
4 DE 221
5 EF 197
然后我可以使用
重新排序df_count$Var1<-factor(df_count$Var1, levels=df_count$Var1[order(df_count$freq, decreasing=TRUE)])
绘制时给了我想要的,每个级别的排序频率。
1.) 这是最优雅的解决方案吗?它为我原始data.frame中的每个因子/列提供了一个额外的data.frame,我觉得必须有一个更简单的方法。
2.) 绘图时,如何重命名图例标签并确保为它们分配正确的因子级别?如果我使用
scale_fill_manual(labels=c("Name of AB", "Name of BC", "Name of CD", "Name of DE","Name of EF"))
标签与正确的级别无关。这里图例中的第一个条目将是“DE”,因为它是频率最高的级别,但标签会显示 scale_fill_manual 中定义的“AB 名称”。 我可以检查每次都手动标记,但必须有自动方式?
【问题讨论】:
标签: r dataframe ggplot2 plyr r-factor