我正在创建一个散点图,如果满足条件,我想通过跟踪连接点。我的数据被分成序列,如果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")
答案 0 :(得分:2)
问题在于您使用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
添加一些不是情节的情节({1}}而你的子集也不会工作
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)