样本数据:
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()
。
1条答案
按热度按时间e5nqia271#
您可以使用quasiquotation代替
aes_string()
(自ggplot2 3.0.0
以来已被弃用):这与您提到的其他tidyverse函数(如
forcats::fct_infreq()
)配合良好。我还将循环中变量的名称从
i
更改为col
,因为当我看到i
时,我希望它表示索引。