如何在多面ggplot2条形图中订购条形图 [英] How to order bars in faceted ggplot2 bar chart

查看:199
本文介绍了如何在多面ggplot2条形图中订购条形图的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

如果我想从ggplot2条形图中排列条从最大到最小,那么我通常会更新条类别的因子级别,例如

<$ p $ b $ one_group< - data.frame(
height = runif(5),
category = gl(5,1)


o < - order(one_group $ height,decrease = TRUE)
one_group $ category < - factor(one_group $ category,levels = one_group $ category [o])

p_one_group < - ggplot(one_group,aes(category,height))+
geom_bar(stat =identity)
p_one_group

如果我有不同的方面有几组不同的barcharts,每个方面都有从最大到最小(以及不同的x轴)排列的条,那么这种技术就会失效。给出一些示例数据

  two_groups<  -  data.frame 


height = runif(10),
category = gl(5,2),
group = gl(2,1,10,labels = letters [1:2])

和绘图代码

  p_two_groups < -  ggplot (two_groups,aes(category,height))+ 
geom_bar(stat =identity)+
facet_grid(。 〜group,scales =free_x)
p_two_groups

我需要做些什么如果有帮助,解决的一个同等问题是:在完成分面之后,我如何更新因子水平?


解决方案

这里是一个黑客:

  two_groups<  -  transform(two_groups,category2 = factor(paste(group,category)))
two_groups< - transform(two_groups,category2 = reorder(category2,rank(height)))

ggplot(two_groups,aes(category2,height))+
geom_bar(stat =identity)+
facet_grid(。〜group,scales =free_x)+
scale_x_discrete( labels = two_groups $ category,breaks = two_groups $ category2)




  1. make UNIQUE 因子变量用于所有条目(category2)

  2. 根据变量重新排列基于高度变量的变量
  3. (x = category2)

  4. 重新标记轴使用scale_x_discrete中变量(category2)的原始值(类别)。


If I want to order the bars in a ggplot2 barchart from largest to smallest, then I'd usually update the factor levels of the bar category, like so

one_group <- data.frame(
  height   = runif(5),
  category = gl(5, 1)
)

o <- order(one_group$height, decreasing = TRUE)
one_group$category <- factor(one_group$category, levels = one_group$category[o])

p_one_group <- ggplot(one_group, aes(category, height)) +
  geom_bar(stat = "identity")
p_one_group

If have have several groups of barcharts that I'd like in different facets, with each facet having bars ordered from largest to smallest (and different x-axes) then the technique breaks down.

Given some sample data

two_groups <- data.frame(
  height   = runif(10),
  category = gl(5, 2),
  group    = gl(2, 1, 10, labels = letters[1:2])
)

and the plotting code

p_two_groups <- ggplot(two_groups, aes(category, height)) +
  geom_bar(stat = "identity") +
  facet_grid(. ~ group, scales = "free_x")
p_two_groups

what do I need to do to get the bar ordering right?

If it helps, an equivalent problem to solve is: how do I update factor levels after I've done the faceting?

解决方案

here is a hack:

two_groups <- transform(two_groups, category2 = factor(paste(group, category)))
two_groups <- transform(two_groups, category2 = reorder(category2, rank(height)))

ggplot(two_groups, aes(category2, height)) +
  geom_bar(stat = "identity") +
  facet_grid(. ~ group, scales = "free_x") +
  scale_x_discrete(labels=two_groups$category, breaks=two_groups$category2)

  1. make UNIQUE factor variable for all entries (category2)
  2. reorder the variable based on the height
  3. plot on the variable: aes(x=category2)
  4. re-label the axis using original value (category) for the variable (category2) in scale_x_discrete.

这篇关于如何在多面ggplot2条形图中订购条形图的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆