Как изменить данные для создания фасетов коробочных диаграмм нескольких переменных в R - PullRequest
0 голосов
/ 29 декабря 2018

Я хочу создать несколько аспектов моих данных, которые иллюстрируют количество каждого из химических веществ, присутствующих в различных условиях.

У меня есть две категориальные переменные, M1 и M2, которые принимают значения "маленький, средний, большой "и" низкий, средний, высокий "соответственно.Я хочу, чтобы они составляли основу сетки граней 3x3.

Затем у меня есть 8 химикатов AH, которые принимают числовое значение, и я хочу получить коробку для каждого химического вещества на каждом фасете.

IЯ создал сетку граней 3x3, но только с одним химическим веществом на каждом.

РЕДАКТИРОВАТЬ (данные взяты из ответа) мои данные похожи на данные, сгенерированные из:

set.seed(1234)

n <- 100
M1 <- sample( c("small", "medium", "large"), n, TRUE)
M2 <- sample( c("low", "medium", "high"), n, TRUE)
tmp <- matrix(sample(100, 8*n, TRUE), ncol = 8)
colnames(tmp) <- LETTERS[1:8]

df <- data.frame(M1, M2)
df <- cbind(df, tmp)
rm(M1, M2, tmp)

Мой код длямой график:

df %>%
  ggplot(aes(x = M1, y = A, fill = M1)) +
  geom_boxplot() +
  theme_minimal() +
  facet_grid(M2 ~ M1)

Я думаю, что мне нужно изменить свои данные, чтобы y = «измерить», прежде чем я сделаю ограненные боксы, но я не уверен, как

Я хочуСетка граней 3х3, так что нижний левый угол будет соответствовать «маленькому», «низкому», а верхний правый - «большому», «высокому», с 8 прямоугольниками на каждом фасете для каждого из химических веществ AH.

Я хочу, чтобы для каждого фасета по оси Y была числовая мера, по оси X - дискретная метка AH (для 8 коробочных графиков).Для всей сетки 3x3 (верхняя) ось x будет 3 метки, маленькая, средняя, ​​большая, а (правая) ось y будет 3 метки, низкая, средняя, ​​высокая?

1 Ответ

0 голосов
/ 29 декабря 2018

Изменить данные с помощью пакета reshape2, функция melt.Затем используйте interaction для определения групп блоков.

long <- reshape2::melt(df, id.vars = c("M1", "M2"))

ggplot(long, aes(x = M1, y = value, group = interaction(M1, M2), fill = M2)) +
  geom_boxplot() +
  theme(axis.text.x = element_text(angle = 30, hjust = 1)) +
  facet_wrap( ~ variable, scales = "free")

enter image description here

Чтобы ответить на запрос в комментарии, посмотрите, имеете ли вы это в виду.

ggplot(long, aes(x = variable, y = value, group = interaction(M1, variable), fill = M2)) +
  geom_boxplot() +
  facet_grid(M1 ~ M2, scales = "free")

enter image description here

Проверка кода создания данных.

Я привел M2 к факторудля того, чтобы легенда была правильно упорядочена.

set.seed(1234)

n <- 100
M1 <- sample( c("small", "medium", "large"), n, TRUE)
M2 <- sample( c("low", "medium", "high"), n, TRUE)
M2 <- factor(M2, levels = c("low", "medium", "high"))
tmp <- matrix(sample(100, 8*n, TRUE), ncol = 8)
colnames(tmp) <- LETTERS[1:8]

df <- data.frame(M1, M2)
df <- cbind(df, tmp)
rm(M1, M2, tmp)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...