在R中同时在多个列中生成多个条形图

时间:2019-11-02 23:05:38

标签: r ggplot2 lapply

数据如下:

df<-read.table(text=" A1 A2 A3  M1 M2 M3 
F   M   F   A   B   A
M   M   F   A   B   A
F   M   F   A   B   A
F   M   F   C   B   A
F   M   F   C   B   A
M   M   F   C   C   B
F   M   F   C   C   B
M   F   F   C   C   B
F   F   F   D   C   B
M   F   F   D   C   B
F   F   F   D   A   B
F   F   F   D   A   C
F   F   F   D   A   C
M   F   F   D   A   C
F   M   M   B   A   D
F   M   M   B   A   D
F   M   M   B   D   D
M   M   M   B   D   D
F   M   M   B   D   D ", h=T)

我想要A1和M1的条形图; A2与M2,A3与M3。到目前为止,我已经尝试过:

library(purrr)
library(ggplot2)
map2(names(df)[4:6], names(df)[1:3], ~
ggplot(df, aes(x = !!rlang::sym(.x), y = !!rlang::sym(.y))) + 
geom_bar())

但是,出现以下错误:

  

错误:不得将stat_count()用作美观对象。

我努力解决该错误。有帮助吗?

我希望每个图都有这个

 ggplot(df, aes(x = A1, fill = M1)) +
 geom_bar(position = position_dodge())

1 个答案:

答案 0 :(得分:0)

要结合工作示例和尝试过的内容,

library(purrr)
library(ggplot2)

map2(names(df)[1:3], names(df)[4:6], ~
       ggplot(df, aes_string(x = .x, fill = .y)) + 
       geom_bar(position = position_dodge()))

您似乎希望fill用于第4-6列(M1,M2和M3)-正确吗?这样,您就不需要y中的aes

此外,您可以使用fill代替aes_string

最后,根据您的工作示例添加了rlang::sym。让我知道您是否打算这样做。