在ggplot2条形图中订单栏

我正在试图制作一个条形图,其中最大的酒吧最接近y轴,最短的酒吧最远。 所以这就像我的桌子一样

    Name   Position
1   James  Goalkeeper
2   Frank  Goalkeeper
3   Jean   Defense
4   Steve  Defense
5   John   Defense
6   Tim    Striker

所以我正在试图建立一个条形图,根据位置显示球员的数量

p <- ggplot(theTable, aes(x = Position)) + geom_bar(binwidth = 1)

但是图上显示了守门员先防守吧,最后是前锋一号。 我想要图表的顺序,以便防守栏最靠近y轴,守门员,最后是前锋之一。 谢谢


订购的关键是按照您想要的顺序设置因子的水平。 有序因子不是必需的; 有序因子中的额外信息不是必需的,如果这些数据在任何统计模型中使用,则可能导致错误的参数化 - 多项式对比不适用于像这样的名义数据。

## set the levels in order we want
theTable <- within(theTable, 
                   Position <- factor(Position, 
                                      levels=names(sort(table(Position), 
                                                        decreasing=TRUE))))
## plot
ggplot(theTable,aes(x=Position))+geom_bar(binwidth=1)

barplot图

从一般意义上讲,我们只需要将因子水平设置为所需的顺序。 根据具体情况,有多种方法可以做到这一点。 例如,我们可以这样做:

levels(theTable$Position) <- c(...)

并在右侧列出所需顺序的级别。 您还可以在呼叫中指定级别顺序,如上所示:

theTable$Position <- factor(theTable$Position, levels = c(...))

@GavinSimpson: reorder是一个强大而有效的解决方案:

ggplot(theTable,
       aes(x=reorder(Position,Position,
                     function(x)-length(x)))) +
       geom_bar()

使用scale_x_discrete (limits = ...)指定条的顺序。

positions <- c("Goalkeeper", "Defense", "Striker")
p <- ggplot(theTable, aes(x = Position)) + scale_x_discrete(limits = positions)
链接地址: http://www.djcxy.com/p/25025.html

上一篇: Order Bars in ggplot2 bar graph

下一篇: Plotting two variables as lines using ggplot2 on the same graph