示例数据:
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()
我要执行的操作是按“ TRUE”值的总和对df $ player轴进行排序,以使其看起来像这样:
我意识到我可以使用这样的东西:
df$player <- factor(df$player, levels=c("b", "a", "c"))
但是实际数据具有更多的“玩家名称”。另外,我希望获得与赢率百分比等类似的东西。因此自动排序会很棒。下面的中奖百分比示例
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()
您可以使用reorder
which是根据某些谓词重新排序因子水平的函数。
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()
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句