Пределы переменной строки с помощью ggplot () - PullRequest
0 голосов
/ 31 мая 2019

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

Данные за диаграммой представляют собой формат кадра данных (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())

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

Risk Level chart

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

1 Ответ

0 голосов
/ 31 мая 2019

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

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