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