繁体   English   中英

R-如果满足条件,则在Plotly中添加跟踪

[英]R - Add trace in Plotly if condition is met

我正在创建一个散点图,如果满足条件,我希望通过迹线连接点。 我的数据分为多个序列,如果X和Y坐标是同一序列的一部分,我希望有一个轨迹。 我的示例数据和代码段如下。

样本数据:

X   Y   Seq
1   3    1
2   5    1
1   4    1
3   1    2
4   5    2
6   3    3
3   4    3

在此示例中,我希望跟踪点(1、3),(2、5),(1、4),跟踪点(3、1),(4、5)和点(6、3),(3 ,4)追踪。 如果有新的序列开始,则跟踪中应该有一个中断。

码:

 plot_ly (data, x = data$X , y = data$Y,
          type = "scatter", 
          mode="markers")%>%
          add_trace(data$Seq==shift(data$Seq, type="lag"), mode="lines")

这是我的实际数据给我的情节图。 您可以看到正在绘制点,但没有中断。 跟踪

问题在于您使用add_trace 当此参数需要现有的绘图/轨迹时,您add_trace我假设的数据子集传递给add_trace的第一个参数。 问题是,由于要使用%>%进行传递,因此该函数将继承原始数据,而忽略您的子集。

请注意,即使我的变量NO与该图无关,以下内容也会给出相同的图:

X=c(1,2,1,3,4,6,3)
Y=c(3,5,4,1,5,3,4)
seq=c(1,1,1,2,2,3,3)
dataX <- data.frame(X,Y,seq)

NO <- "this won't work"
plot_ly plot_ly (dataX, x = dataX$X , y = dataX$Y,
         type = "scatter", 
         mode="markers") %>%
          add_trace(NO, mode="lines")

在此处输入图片说明

你可以解决这个inherit=F ,但随后它不会工作,因为add_trace试图添加一些情节NO这是不是一个阴谋(和你的子集将不会工作)

plot_ly (dataX, x = dataX$X , y = dataX$Y,
         type = "scatter", 
         mode="markers") %>%
  add_trace(NO, mode="lines", inherit=FALSE)

## No trace type specified: 

添加跟踪时,您希望在x=y=明确显示。 然后,您可以允许它自动继承上一个图/迹线,或指定一个。 至于您要执行的操作,可以使用循环来构建它:

#make the plot
p <- plot_ly (dataX, x = dataX$X , y = dataX$Y,
         type = "scatter", 
         mode="markers")

#build it up
for(i in levels(factor(dataX$seq))){
  #subset data
  dataFilt <- dataX[dataX$seq==i,]
  #add it
  p <- add_trace(p, x=dataFilt$X, y=dataFilt$Y,mode="lines",color ='yellow')
}
p

在此处输入图片说明

每次都会制作一个新系列,因此需要一些工作。 您可以隐藏图例,它看起来正确:

p %>%
  layout(showlegend = FALSE)

在此处输入图片说明

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM