在for循环中按计数重新排序geom_bar()条

hrirmatl  于 2023-04-03  发布在  其他
关注(0)|答案(1)|浏览(102)

样本数据:

df <- structure(list(Gender = structure(c(3L, 1L, 3L, 1L, 3L, 3L, 1L, 
                                      3L, 1L, 3L, 1L), levels = c("Man", "Other", "Woman"), class = "factor"), 
                 Country = structure(c(2L, 2L, 2L, 2L, 2L, 1L, 1L, 1L, 1L, 
                                       1L, 1L), levels = c("Germany", "Poland"), class = "factor")), row.names = c(NA, 
                                                                                                                   -11L), class = c("tbl_df", "tbl", "data.frame"))

我使用下面的for循环为df的每个变量生成条形图:

library(ggplot2)

for (i in colnames(df)){
  plot <- ggplot(data = df, aes_string(y = i)) +
    geom_bar()
  print(plot)
}

这可以工作并生成2个条形图。也就是说,我如何按降序重新排序条形图?
在for循环之外,我使用reorder()fct_reorder()fct_infreq(),这取决于手头的数据。在某些情况下,我还使用管道来生成count变量。
我已经在for循环中尝试了所有这些方法,但它不起作用。谢谢你的帮助。
很高兴使用geom_bar()geom_col()

e5nqia27

e5nqia271#

您可以使用quasiquotation代替aes_string()(自ggplot2 3.0.0以来已被弃用):

for (col in colnames(df)){
  plot <- ggplot(
        data = df, 
        aes(y = forcats::fct_infreq(
            !!sym(col))
        )
    ) +
    geom_bar()
  print(plot)
}

这与您提到的其他tidyverse函数(如forcats::fct_infreq())配合良好。
我还将循环中变量的名称从i更改为col,因为当我看到i时,我希望它表示索引。

相关问题