使用 geom_col() 时如何对 y 结果进行排序?
Posted
技术标签:
【中文标题】使用 geom_col() 时如何对 y 结果进行排序?【英文标题】:How can I sort my y result when using geom_col()? 【发布时间】:2021-12-29 17:43:23 【问题描述】:我有两个情节:
1.
ggplot() + geom_col(data = descritivasseries,
aes(x = streaming, y = media_IMDB),
fill = "seagreen1") +
coord_cartesian(ylim = c(6.85, 7.20)) +
labs(title = "Avaliação das Séries",
x = "", y = "Média das Notas IMDb")
ggplot() + geom_col(data = descritivasfilmes,
aes(x = streaming, y = media_IMDB),
fill = "deepskyblue") +
labs(title = "Avaliação dos Filmes", x = "", y = "Média das Notas IMDb") +
coord_cartesian(ylim = c(5.85, 6.6))
第一个看起来像这样:
第二个看起来像这样:
我希望他们的两个 y 结果都按升序排列。我该怎么做?
【问题讨论】:
【参考方案1】:您可以使用 forcats 包中的 fct_reorder()
在 ggplot()
命令中重新排序因子。
library(ggplot2)
library(forcats)
df <- data.frame(
streaming = c("Disney", "Hulu", "Netflix", "Prime Video"),
score = c(4, 2, 3, 1)
)
# no forcats::fct_reorder()
ggplot(df, aes(x = streaming, y = score)) +
geom_col()
# with forcats::fct_reorder()
ggplot(df, aes(x = forcats::fct_reorder(streaming, score), y = score)) +
geom_col()
由reprex package 创建于 2021-11-18 (v2.0.1)
要颠倒顺序,运行
ggplot(df, aes(x = forcats::fct_reorder(streaming, desc(score)), y = score)) +
geom_col()
【讨论】:
谢谢!它工作得很好!现在只是出于好奇,如果我想按降序排列呢? 对于降序,只需将您的 y 变量 (score
) 包装在 desc()
: ggplot(df, aes(x = forcats::fct_reorder(streaming, desc(score)), y = score)) + geom_col()
【参考方案2】:
ggplot 使用因子顺序来决定列的顺序。 您需要重新排序因子。您可以根据另一个(数字)变量以升序或降序对因子(在本例中为“流式”)重新排序。你没有提供整个数据集,所以为了说明我做了一些数据:
´´´´
library (ggplot2)
library(dplyr)
library(forcats)
descritivasseries <- tibble(streaming = c("Hulu", "Disney", "Netflix", "Prime Video"),
media_IMDB = c(15, 13, 18, 10))
ggplot() + geom_col(data = descritivasseries,
aes(x = streaming, y = media_IMDB),
fill = "seagreen1") +
labs(title = "Avaliação das Séries",
x = "", y = "Média das Notas IMDb")
顺序不是升序。但是,如果您将 mutate 与 fct_reorder 结合使用,并根据“media_IMDB”重新排序“流”:
descritivasseries %>% mutate(streaming = fct_reorder(streaming, media_IMDB, .desc=FALSE)) %>%
ggplot() + geom_col(aes(x = streaming, y = media_IMDB),
fill = "seagreen1") +
labs(title = "Avaliação das Séries",
x = "", y = "Média das Notas IMDb")
【讨论】:
以上是关于使用 geom_col() 时如何对 y 结果进行排序?的主要内容,如果未能解决你的问题,请参考以下文章
使用 facet_grid 和一个因子来确定列的填充颜色时保持列的顺序 (geom_col)