示例数据:
player <- c("a", "b", "a", "b", "c",
"a", "a", "b", "c", "b",
"c", "a", "c", "c", "a")
is.winner <- c(TRUE, FALSE, TRUE, TRUE, TRUE,
FALSE, TRUE, TRUE, TRUE, FALSE,
TRUE, TRUE, TRUE, TRUE, FALSE)
df <- data.frame(player, is.winner)
我的第一张图看起来像这样
ggplot(data=df, aes(x=player, y=as.numeric(is.winner))) +
geom_bar(stat="summary", fun.y=sum) +
coord_flip()
我想要做的是将df $ player轴排序为&#34; TRUE&#34;值,使它看起来像这样:
我意识到我可以使用这样的东西:
df$player <- factor(df$player, levels=c("b", "a", "c"))
但实际数据中有更多的玩家名称&#39;。另外我想要与胜利百分比等类似的事情。所以自动排序会很棒。胜率百分比低于
的示例df$is.winner <- factor(df$is.winner, levels=c("TRUE", "FALSE"))
df$player <- factor(df$player, levels=c("c", "b", "a"))
library(scales)
library(RColorBrewer)
ggplot(data=df, aes(x=player)) +
geom_bar(aes(fill=is.winner),position='fill')+
scale_y_continuous(labels=percent)+
scale_fill_brewer(palette="Set2") +
coord_flip()
答案 0 :(得分:7)
您可以使用reorder
这是一个根据某个谓词重新排序因子级别的函数。
ggplot(data=df, aes(x=reorder(player, is.winner, function(x){ sum(x) }),
y=as.numeric(is.winner))) +
geom_bar(stat="summary", fun.y=sum) +
coord_flip()
reorder(x, X, FUN)
需要
x
,重新排序的因素。X
与x
长度相同的向量。该向量将被拆分为每个级别的子集,并传递给函数FUN
。 FUN
应用于每个级别子集的函数。此函数应采用向量并返回将用于对因子级别进行排序的标量。在上一个示例中,您需要再次将向量转换为布尔值,以便能够对其求和:
df$is.winner <- factor(df$is.winner, levels=c("TRUE", "FALSE"))
ggplot(data=df, aes(x=reorder(player, df$is.winner=="TRUE", sum), fill=is.winner)) +
geom_bar(position='fill') +
scale_y_continuous(labels=percent) +
scale_fill_brewer(palette="Set2") +
xlab("player") +
coord_flip()