Генерация нескольких гистограмм в нескольких столбцах одновременно в R - PullRequest
0 голосов
/ 03 ноября 2019

Данные следующие:

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;А2 с М2 и А3 с М3. До сих пор я пытался:

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 голосов
/ 03 ноября 2019

Комбинируя как рабочий пример, так и то, что было опробовано, вы хотели:

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.

Наконец, добавлено position_dodge на основе вашего рабочего примера. Дайте мне знать, если это то, что вы имели в виду.

...