Force geom_bar to not interfer with x ordering under any circumstances?
我正在尝试禁用 geom_bar 中 x 变量的字母顺序重新排序。我看到很多关于如何在一个简单的条形图中重新排序 x 变量的问题和答案(例如,这里、这里、这里),但是每个答案都引入了复杂性,如果可以保留顺序
有没有办法将预先安排的 data.frame 传递到 geom_bar() 并停用字母重新排序,以便生成的条形图按照 x 在 data.frame 中出现的顺序简单地显示 x?
例子
假设我们有一些数据已经按照应该绘制的方式排序
1
2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 |
df <- structure(list(software = c(“Python”,”R”,”SQL”,”Hadoop”,”Tableau”,
“Scala”,”SAS”,”Java”,”C”,”Spark”), users = c(6440, 5750, 4725,1755, 1660, 1560, 1490, 965, 875, 830)), row.names = c(NA, -10L), class =”data.frame”)
# software users df %>% ggplot(aes(software, users)) + geom_bar(stat =”identity”) + |
这会重新排序 x – 我们如何强制 geom_bar 不按字母顺序重新排序列,以便生成的条形图按照它在 data.frame 中出现的顺序显示 x,这样我们不需要做任何进一步的重新排序?
另外,jou 也可以简单地设置 x 轴的范围,这样你就不用再纠结于因素了:
1
2 3 4 |
df %>% ggplot(aes(software, users)) +
geom_col() + scale_x_discrete(limits = unique(df$software)) theme(axis.text.x = element_text(angle = 90, hjust = 1)) |
友情提示:geom_col()与geom_bar(stat =”identity”)相同,但更短。
将其更改为因数,并根据出现情况对其进行排列。
1
2 3 4 5 6 7 |
library(dplyr)
library(ggplot2) df %>% |
要重新排列而不将列更改为因子,我们可以使用 reorder
1
2 3 |
ggplot(df) + aes(reorder(software, match(software,unique(software))), users) +
geom_bar(stat =”identity”) + theme(axis.text.x = element_text(angle = 90, hjust = 1)) |
- 有没有办法在不改变输入data.frame的情况下做到这一点? (例如,不改变因子?)
来源:https://www.codenong.com/60680005/