删除由 lty 引起的行中断

remove the break in the line being caused by lty

我有一个时间序列,我想在 ggplot 中绘制。我想表明数据在某一点出现了中断。我相信一个好的方法是改变线型(即 lty)。然而,这样做会使情节出现恼人的中断。有没有办法连接这些线?

这是时间序列的一些示例代码,其中 "break" 其中 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 == 0year == 1 之间跳跃的折线图,这是我不想要的。

谢谢互联网的聪明人!!!

这个怪癖是由 ggplot 基于 colourlinetype 等的数据点隐式分组引起的。手动将组设置为某些东西并不能解决这个问题,因为有一个 1- line-1-look 规则。

这里有两个选项。

选项 1:只需复制数据点并就地修改:

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()

reprex package (v0.3.0)

于 2020-05-27 创建