Соединение точек из разных групп на категориальной оси X с помощью ggplot - PullRequest
1 голос
/ 08 мая 2020

Я пытаюсь визуализировать изменение изобилия A, B и C между тремя методами. A, B и C также делятся на две группы («X» и «Y»). Я пытаюсь построить их с помощью ggplot и связать наблюдения от метода к методу, но мне это не удалось. Вот что я сделал:

factor_1 <- c(rep(c("A", "B", "C"), times =6))
Abundance <- c(sample(x = 1:100, replace = T, size = 18))
factor_2 <- c(rep(c("X", "Y"), each = 3, times = 3))
factor_3 <- c(rep(c("Method 1", "Method 2", "Method 3"), each = 6))
datframe <- tibble(factor_1, factor_2, Abundance, factor_3)     

Первый график соединяет точки только по вертикали в каждом методе.

datframe %>%
  ggplot(aes(x = factor_3, y = Abundance, color = factor_2))+
  geom_point() +
  geom_line()

При попытке группировки factor_1 или factor_2 , кажется, объединяет все в одну строку

datframe %>%
  ggplot(aes(x = factor_3, y = Abundance, color = factor_2))+
  geom_point() +
  geom_line(group = c(factor_2))

datframe %>%
  ggplot(aes(x = factor_3, y = Abundance, color = factor_2))+
  geom_point() +
  geom_line(group = c(factor_1))

Даже если я рисую только одну строку, R жалуется, говоря: « geom_path: Каждая группа состоит только из одного наблюдения. Вам нужно настроить группу aestheti c? " и не соединяет точки.

datframe %>%
  filter(factor_1 == "A", factor_2 == "X") %>%
  ggplot(aes(x = factor_3, y = Abundance, color = factor_2))+
           geom_point() +
           geom_line()

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

Это более-менее то, что я хочу. Его не нужно даже кодировать цветом, так как я мог бы сделать два графика, один для «X», а другой для «Y».

Заранее благодарю за вашу помощь.

Ответы [ 2 ]

1 голос
/ 08 мая 2020

это то, что вы ищете ??

datframe %>%
  ggplot(aes(x = factor_1, y = Abundance, color = factor_2, group = factor_2))+
  geom_point() +
  geom_line() +
  facet_wrap(~factor_3)

enter image description here

0 голосов
/ 08 мая 2020

Один подход - с interaction:

library(ggplot2)
datframe %>%
  ggplot(aes(x = factor_3, y = Abundance, color = factor_2, group = interaction(factor_1,factor_2)))+
  geom_point() + 
  geom_line()

enter image description here

Вы также можете рассмотреть возможность включения второй визуальной эстетики c, чтобы отличить factor_1.

datframe %>%
  ggplot(aes(x = factor_3, y = Abundance, color = factor_2, linetype = factor_1, group = interaction(factor_1,factor_2)))+
  geom_point() + 
  geom_line()

enter image description here

Данные

set.seed(1)
datframe <- tibble(factor_1 = rep(c("A", "B", "C"), times =6),
                   Abundance = sample(x = 1:100, replace = T, size = 18),
                   factor_2 = rep(c("X", "Y"), each = 3, times = 3),
                   factor_3 = rep(c("Method 1", "Method 2", "Method 3"), each = 6))
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...