3

可能重复:
ggplot2条形图中的顺序条

我有一个数据集,我想要一个 ggplot 条形图来描述其中一个变量的比例,并根据另一个变量对条形图进行排序或排序。这是数据集的示例。

grouping,category,domain
6,W,ced0.11
1,none,ced1.1
2,none,ced1.1
3,Z,ced1.5
2,Z,ced1.7
3,Z,ced1.3
3,none,ced1.6
2,none,ced1.1
1,Z,ced1.1
4,none,ced0.8
4,W,ced0.6
4,W,ced0.6
2,Z,ced1.5
2,W,ced1.6
4,Y,ced0.16
3,Z,ced1.5
4,Y,ced0.15
4,W,ced0.15
4,Y,ced0.24
6,W,ced0.8
4,Y,ced0.4
4,none,ced0.19
4,W,ced0.5
4,W,ced0.10
4,W,ced0.9
4,W,ced0.3
1,Z,ced1.6
4,W,ced0.9
4,W,ced0.15
1,Z,ced1.1
4,Y,ced0.19
6,W,ced0.4
4,W,ced0.16
4,W,ced0.6
4,W,ced0.5
2,Z,ced1.7
4,W,ced0.9
4,Y,ced0.1
4,W,ced0.2
4,Y,ced0.21
2,W,ced0.3
4,Y,ced0.21
4,W,ced0.10
1,Z,ced1.2
4,Y,ced0.16
1,Z,ced1.2
1,Z,ced1.2
5,W,ced0.23
4,Y,ced0.1

以及下面用于导入和显示条形图的代码。

library(ggplot2)
ex1.dta <- read.csv("../../Datasets/ex1.txt",sep=",",header=TRUE)

#sort the data frame
ex1.dta2 <- transform(ex1.dta,domain=reorder(domain,category))

ggplot(ex1.dta2,aes(domain,fill=category)) +
  geom_bar(position="fill") + 
  scale_y_continuous(name="Proportion") + 
  scale_x_discrete(name="domains") +
  scale_fill_manual(values=c("#841108","#16a4e9","#a4a42a","#eb96ed","grey"),name="category") + 
  theme_bw() +
  opts(
    axis.text.x=theme_text(angle=-90,hjust=0),
    axis.line = theme_segment(colour = "black"),
    panel.grid.major = theme_blank(),
    panel.grid.minor = theme_blank(),
    panel.border = theme_blank()) +
  geom_vline(xintercept = 0)

在此处输入图像描述

当我使用转换对数据框进行排序时,我收到警告并且不执行排序/排序。我真正想要的是排序,使每个类别的条沿 x 轴组合在一起(并按降序排列)。(所有棕色条一起,浅蓝色一起并以“分层方式”等等。)

我怎样才能做到这一点?我需要多次订购吗?任何想法?

4

1 回答 1

1

我不完全确定你真正想要什么顺序,但你可以尝试这样的事情:

ex1.dta2 <- transform(ex1.dta,domain=reorder(domain,category,FUN = function(x){ min(as.numeric(x)) }))

结果将取决于级别的category排列方式,因此如果这不是您想要的确切顺序,您应该进行调整。在这种情况下,我得到以下图表:

在此处输入图像描述

这里发生的事情是因子在内部存储为整数代码和标签集。因此,要根据因子重新排序,category我只需传递一个匿名函数,该函数将转换为整数代码,然后选择最小值。

于 2012-09-16T20:48:58.313 回答