Ограничения переменных строк с помощью ggplot()

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

Данные, лежащие в основе диаграммы, представляют собой формат фрейма данных (meltdf2) с 4 столбцами: месяц, пользователь, оценка и риск.

Упрощенная версия будет:

Month   user   score   risk
jan-18  A      1       high
feb-18  A      1       high
mar-18  A      2       mid
apr-18  A      1       high
feb-18  B      1       high
mar-18  B      2       mid
apr-18  B      3       low
mar-18  C      3       low
apr-18  C      3       low

В настоящее время на диаграмме отображаются три строки, по одной для каждого пользователя, каждая строка покрывает всю диаграмму. В идеале я бы хотел, чтобы диаграмма с линией A занимала всю ширину диаграммы, а линии B и C — только часть диаграммы.

Я попытался включить значения NA для месяцев, не охватываемых B и C, но их линии по-прежнему охватывают всю диаграмму. Не выполнив маршрут значения NA, я попытался вручную установить несколько цветов в одной строке, но это, похоже, не работает.

Текущий код, который я использую, выглядит следующим образом:

#create colour palette based on discrete risk levels - used to specify manual colour scale in plot.
pal <- c("High" = "red2","Mid" = "gold","Low" = "limegreen","NA"= "NA")

#create plot with line and points.
#colour of points based on colour column of meltdf2
ggplot(data = meltdf2, aes(x = Month, y = user, group = user)) +
  geom_line(linetype = "dashed", colour = "grey") +
  geom_point(aes(colour = meltdf2$risk, size = 3)) +
  scale_colour_manual(values = pal, limits = names(pal)) +
  scale_x_date(date_breaks = "1 month" , date_labels = "%b-%y") +
  theme(axis.title.y=element_blank(), axis.text.y=element_blank(), axis.ticks.y=element_blank(),
        axis.line.x = element_line(colour = "darkgrey"),
        panel.background = element_rect(fill = "white"),
        panel.grid.major = element_blank(), panel.grid.minor = element_blank())

Этот код создает следующую диаграмму:

Ограничения переменных строк с помощью ggplot()

В идеале участок каждой из серых пунктирных линий до первой точки данных для каждой серии не будет отображаться.

Я не могу воспроизвести вашу проблему с предоставленным фрагментом данных. Кроме того, ваш фрагмент данных не похож на data.frame, который вы предоставляете ggplot, на основе имен столбцов/аргументов ggplot, так что это также сбивает с толку. Мое лучшее предположение было бы ggplot(df, aes(Month, score, group = user)) + geom_line() + geom_point(aes(colour = colour)) + scale_colour_identity()

teunbrand 31.05.2019 10:28

@teunbrand Я внес некоторые изменения в вопрос - надеюсь, теперь стало понятнее

Ant 31.05.2019 10:59
Стоит ли изучать PHP в 2023-2024 годах?
Стоит ли изучать PHP в 2023-2024 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Приемы CSS-макетирования - floats и Flexbox
Приемы CSS-макетирования - floats и Flexbox
Здравствуйте, друзья-студенты! Готовы совершенствовать свои навыки веб-дизайна? Сегодня в нашем путешествии мы рассмотрим приемы CSS-верстки - в...
Тестирование функциональных ngrx-эффектов в Angular 16 с помощью Jest
В системе управления состояниями ngrx, совместимой с Angular 16, появились функциональные эффекты. Это здорово и делает код определенно легче для...
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
0
2
326
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Эта проблема была решена путем изменения фрейма данных (meltdf2) за диаграммой. Использование na.omit(meltdf2) удалило строки, в которых не существовало данных для каждой серии, и предотвратило построение линии. Конечный результат ниже:

Другие вопросы по теме