强制geom_bar在任何情况下都不干扰x的顺序?

问题描述 投票:2回答:2

我正在尝试禁用geom_bar中x变量的字母重排序。我在简单的条形图(例如hereherehere)中看到了很多有关如何对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,这样我们就不必再进行任何重新排序了?
r ggplot2 tidyverse geom-bar
2个回答
4
投票
将其更改为因式,并根据出现的情况进行排列。

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))

enter image description here

要重新排列而不将列更改为因子,我们可以使用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))


4
投票
或者,jou也可以简单地设置x轴的限制,这可以避免您因各种因素而感到困惑:

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")相同,但更短。
© www.soinside.com 2019 - 2024. All rights reserved.