如何使用ggplot / geom_bar命令绘制分组条形图

3

我有一个数据框,其中包含如下条目:

   变量名  重要性 排序
1       foo  0.06977263     1
2       bar  0.05532474     2
3       baz  0.03589902     3
4     alpha  0.03552195     4
5      beta  0.03489081     5
       ...

在使用 breaks = variable 绘制图表时,我希望保留排序,而不是按字母顺序排列。

我正在使用以下代码进行渲染:

 
ggplot (data, aes(x=variable, weight=importance, fill=variable)) + 
    geom_bar() + 
    coord_flip() + opts(legend.position='none')

然而,变量名的排序是按字母顺序排列的,而不是数据框内的顺序。我曾经看到过一篇关于在 aes 中使用“order”的文章,但似乎没有效果。

我希望 breaks 的顺序与“order”列中的顺序相一致。

有一个类似的问题:How to change the order of discrete x scale in ggplot,但老实说,我不理解这个上下文中的答案。


1
请注意:如果您使用dput并在帖子末尾添加一小部分数据样本(或者使用基于R的datasets包中的全局可用数据集),那么其他人回答问题会更容易。 - Shane
variable是一个字符还是一个因子? - Joshua Ulrich
变量是一个因素。我将查看下面的答案... - Jonathan Shore
Shane,感谢您的提示。我之前不知道dput。 - Jonathan Shore
4个回答

7

4
更简短易懂的表述如下:
data$Variable <- reorder(data$Variable, data$order)

2
另一种解决方案是先绘制订单,然后事后更改标签:
df <- data.frame(variable=letters[c(3,3,2,5,1)], importance=rnorm(5), order=1:5)
p <- qplot(x=order, weight=importance, fill=variable, data=df, geom="bar") + 
  scale_x_continuous("", breaks=1:5, labels=df$variable) + 
  coord_flip() + opts(legend.position='none')

谢谢。这解决了问题。但希望有一个内置的方法,可以设定一个排序属性,不过我认为这可能不是一个被广泛使用的功能。 - Jonathan Shore

1
一次尝试,也许可以像这样:
data$variable <- factor(data$variable, levels=data$variable)

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接