удалить разрыв строки, вызванный lty - PullRequest
0 голосов
/ 27 мая 2020

У меня есть временной ряд, который я хотел бы построить в ggplot. Я хочу показать, что в какой-то момент данные прерываются. Я считаю, что хороший способ сделать это - изменить тип линии (ie lty). Однако это приводит к досадному перерыву в сюжете. Есть ли способ соединить эти линии?

Вот пример кода временного ряда, в котором есть «разрыв», где year == 0:

df = tibble(year = -5:5, value=runif(11))
df$lty = df$year <= 0

ggplot(data=df, aes(x=year, y=value, lty=lty)) + geom_line()

У меня проблемы загружаю получившееся изображение, но при этом создается линейный график со скачком между year == 0 и year == 1, что мне не нужно.

Спасибо, умные люди rnet !!!

1 Ответ

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

Эта причуда вызвана неявной группировкой точек данных в ggplot на основе colour, linetype et c. Установка группы вручную на что-то не решит эту проблему, потому что существует правило 1-строка-1-внешний вид.

Вот два варианта.

Вариант 1: просто скопируйте datapoint и измените на месте:

library(tidyverse)

df = tibble(year = -5:5, value=runif(11))
df$lty = df$year <= 0

df <- rbind(df, df[df$year == 0,])
df$lty[nrow(df)] <- FALSE

ggplot(data=df, aes(x=year, y=value, lty=lty)) + geom_line()

Вариант 2: вместо этого параметризуйте данные как сегменты

df = tibble(year = -5:5, value=runif(11))
df = cbind(head(df, -1),
           tail(df, -1)) %>%
  setNames(c("year0", "value0", "year1", "value1"))

df$lty <- df$year0 <= 0 & df$year1 <= 0

ggplot(df, aes(x = year0, y = value0, xend = year1, yend = value1, linetype = lty)) +
  geom_segment()

Создано 27.05.2020 с помощью пакета . (v0.3.0)

...