R 在ggplot2中对条进行分组

R 在ggplot2中对条进行分组,r,ggplot2,dataframe,R,Ggplot2,Dataframe,可能重复: 我有一个数据集,我想有一个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

可能重复:

我有一个数据集,我想有一个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)
库(ggplot2)

ex1.dta我不完全确定您实际想要什么样的订单,但您可以尝试以下方式:

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

ex1.dta2您是否阅读了
上的文档?重新排序
?具体来说,您希望对
类别
的值子集求平均值有什么意义?谢谢joram。哦,所以重新排序通常需要一个数字变量。但是,当您遇到上述情况时,推荐的方法是什么?facet_网格不会产生期望的结果。随着更多类别的出现,它也过于“冗长”。我更喜欢在一个图中对条进行排序/重新排序的解决方案。谢谢joran!但是,我希望ced0.10、ced0.11、ced0.2、ced0.23、ced0.3、ced0.5、0.6和0.9的列彼此相邻。@每当您希望某个因子的级别按特定顺序排列时,必须明确地告诉R该顺序。有一些编程方法可以做到这一点(即,
重新排序
),但如果做不到这一点,您只需要执行
ex1.dta2