Создайте линейный график, используя категориальные данные и не соединяя линии - PullRequest
3 голосов
/ 03 марта 2020

Попытка создать график, где x и y являются факторами, но я не хочу, чтобы линии были соединены, если есть разрыв. Как мне этого добиться?

library(ggplot2)

df <- data.frame(x = c('a', 'b', 'c', 'd', 'e'), y = c('a', 'a', NA, 'a', 'a'))

ggplot(df, aes(x = x, y = y, group = y)) +
  geom_point() + 
  geom_line()

Не хотите, чтобы АН на графике, и не должно быть линии между b и d.

Ответы [ 2 ]

2 голосов
/ 03 марта 2020

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

df <- data.frame(x = c('a', 'b', 'c', 'd', 'e'), y = c('a', 'a', NA, 'a', 'a'), stringsAsFactors = FALSE)

df %>% 
  mutate(grp = with(rle(y), rep(seq_along(lengths), lengths))) %>%  # y can't be a factor
  mutate_all(as.factor) %>%
  na.omit() %>%                              # Drop NA cases so they're not plotted
  ggplot(aes(x = x, y = y, group = grp)) +
  geom_point() + 
  geom_line() +
  scale_x_discrete(drop = FALSE)             # Preserve empty factor levels in the plot

enter image description here

0 голосов
/ 04 марта 2020

Другим способом является факторизация y и использование уровней. Группа с group = 1. Вы можете пометить меткой scale.

library(ggplot2)
df <- data.frame(x = c('a', 'b', 'c', 'd', 'e'), 
                 y = c('a', 'a', NA, 'a', 'a'))

ggplot(df, aes(x = x, y = as.numeric(as.factor(y)), group = 1)) +
  geom_point() + 
  geom_line() +
  scale_y_continuous(breaks = 1, labels = 'a') +
  labs(y = 'y')
#> Warning: Removed 1 rows containing missing values (geom_point).

Создано в 2020-03-04 с помощью пакета Представить (v0.3.0 )

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...