【问题标题】:Sort barplot columns ggplot对条形图列进行排序 ggplot
【发布时间】:2013-02-12 05:15:54
【问题描述】:

我有这个 R 代码来生成以下条形图:

d <- data.frame(case = c(1,2,3,4), 
                var=c('foo', 'foo', 'foo', 'foo','bar', 'bar', 'bar', 'bar'), 
                val=c(9,2,2,4,6,1,2,3))
d$var <- as.factor(d$var)
d$case <- as.factor(d$case)
ggplot(d, aes(x = case, y = val, fill = var)) + scale_x_discrete() + geom_bar(position="dodge")

如何按“bar”的值对条形图进行排序?

免责声明:这可能与https://stackoverflow.com/questions/10746342/sorting-ggplot2-box-plot-by-2-columns 重复,但没有得到答复,所以...

【问题讨论】:

  • @Arun 我认为您只需要修改您的答案,以在val 内对case 的级别进行排序foo,但我同意这个问题并不太清楚。
  • @Arun,感谢您的回答,我真正想说的是,我想不是按案例而是跨案例对列进行排序。在我的示例中,如果我“按 bar 的值对条形进行排序”,我希望按以下顺序显示案例:1、4、3、2
  • Arun 基本上已经为您指明了方向,尽管他误读了您希望它如何排序。只需按所需顺序指定case 的级别。
  • 好的,经过足够的试验,现在,我想我做对了。感谢@joran 澄清问题。

标签: r sorting bar-chart ggplot2


【解决方案1】:

使用order 获取按bar 的值排序的列,并将其复制到foo 中。然后将此列用于x

d$case <- match(d$val[d$var == "bar"], sort(d$val[d$var == "bar"]))
d$case <- factor(d$case, levels=1:4)
# now use this:
ggplot(d, aes(x = case, y = val, fill = var)) +  
         geom_bar(position="dodge", stat="identity")

(或等效)

 ggplot(d, aes( x= order, fill = var)) + geom_bar(aes(weights=val), position="dodge")

【讨论】:

  • 这是我所期待的。非常感谢!
猜你喜欢
  • 2022-08-23
  • 1970-01-01
  • 1970-01-01
  • 2021-09-03
  • 1970-01-01
  • 2017-09-09
  • 2014-10-02
  • 1970-01-01
  • 2014-05-03
相关资源
最近更新 更多