Я строю ряд временных рядов на одной паре осей. Эта серия охватывает различные периоды времени - например, некоторые покрывают год, некоторые только несколько месяцев. Мне бы хотелось, чтобы в полученных графиках была построена одна линия на серию, причем каждая линия видна только для того периода, который охватывает серия.
Данные за диаграммой представляют собой формат кадра данных (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())
Этот код создает следующую диаграмму:
В идеале сечение каждой из пунктирных серых линий перед первым точкой данных для каждой серии не будет отображаться.