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

R语言 柱状图 geom_col 与 geom_bar 与geom_histogram(直方图)

如何对整数除法的结果进行四舍五入?

向 geom_col 添加值会破坏整个情节

对linq查询结果进行去重处理

如何使用 R 将饼图保存到 ppt 幻灯片中?