【问题标题】:Changing linetype within timeseries ggplot2在时间序列ggplot2中更改线型
【发布时间】:2020-02-06 00:04:03
【问题描述】:

我有一个关于水流和水温的时间序列数据集,我想在温度超过某个阈值时绘制并突出显示该数据集。理想情况下,只要温度值超过此阈值,我就会通过更改线型来做到这一点。但是,我不知道如何在不创建多行的情况下让 ggplot 在数据集中多次更改线型。下面是一个虚拟数据集。

#date values
date<-seq(as.Date("2019-01-01"), as.Date("2019-01-30"), "days")
#set arbitrary values for variables
set.seed(10)
val1<-rnorm(30, mean = 10)
val2<-rnorm(30, mean = 50)
df<-data.frame(date, val1, val2)

#add a threshold grouping layer to plot with
df$group<-ifelse(df$val2 <= 50, "One","Two")

我想做的是在绘制“一”时使用实线,而在绘制到“二”时使用虚线 - 本质上是在下图中通过颜色连接点。

ggplot(df, aes(date, val1))+
  geom_line()+
  geom_point(aes(col = group))

但是,当我添加线型美学时,ggplot 将数据分成两组并绘制两条线:

#what happens when I plot by linetype
ggplot(df, aes(date, val1))+
  geom_line(aes(linetype = group))+
  geom_point(aes(col = group))

我或许能够找到一种方法来破解多个数据集并将它们绘制在一起以实现此目的,但我将在多面图中绘制多组数据,所以这并不理想。

我发现的其他示例,例如 this 仅在时间序列数据中完全中断时才有效。同样thesetwo 不会来回切换,所以对我的应用程序没有多大用处。

【问题讨论】:

    标签: r ggplot2


    【解决方案1】:

    这是你想要的吗?

    ggplot(df, aes(date, val1))+
      geom_segment(aes(xend = lead(date),
                       yend = lead(val1),
                       lty = lead(group))) +
      geom_point(aes(col = group))
    

    【讨论】:

    • 完美 - 是的。谢谢!
    猜你喜欢
    • 1970-01-01
    • 2018-09-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-04-10
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多