我正在尝试禁用geom_bar
中x变量的字母重排序。我在简单的条形图(例如here,here,here)中看到了很多有关如何对x变量进行[[reorder的问题和答案,但是每个答案都引入了复杂性,如果不需要,则不需要这样做顺序可以是完好无缺
any方法将预先安排的data.frame通过管道传送到geom_bar()
并取消按字母顺序排列的重新排序,以便结果条形图仅按x的顺序显示x
出现在data.frame中?
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
# 1 Python 6440
# 2 R 5750
# 3 SQL 4725
# 4 Hadoop 1755
# 5 Tableau 1660
# 6 Scala 1560
# 7 SAS 1490
# 8 Java 965
# 9 C 875
# 10 Spark 830
df %>% ggplot(aes(software, users)) + geom_bar(stat = "identity") +
theme(axis.text.x = element_text(angle = 90, hjust = 1))
此重新排列按字母顺序对列进行重新排列,以使所得的条形图按在数据中出现的顺序显示x
-如何强制geom_bar
变为not
x
.frame,这样我们就不必再进行任何重新排序了?library(dplyr)
library(ggplot2)
df %>%
mutate(software = factor(software, levels = unique(software))) %>%
ggplot() + aes(software, users) + geom_bar(stat = "identity") +
theme(axis.text.x = element_text(angle = 90, hjust = 1))
要重新排列而不将列更改为因子,我们可以使用
reorder
ggplot(df) + aes(reorder(software, match(software,unique(software))), users) + geom_bar(stat = "identity") + theme(axis.text.x = element_text(angle = 90, hjust = 1))
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")
相同,但更短。