Я хочу построить ряд временного угла в координатах xy.когда разница между двумя соседями меньше 180, они будут выровнены напрямую.В противном случае один будет выровнен до 360, а другой - до 0 с тем же временем, это означает, что путь пересек точку 0/360.Что я знаю, так это сначала вычислить две интерполирующие точки и построить два сегмента, есть ли какой-нибудь умный прямой способ сделать это?
library(ggplot2)
data<-data.frame(time=c(1,2,3,4),angle=c(200,100,320,20))
#ggplot()+geom_line(data,aes(time,angle))
#three lines codes is expected,but now it is->
ymax=360
ymin=0
ythd=(ymax-ymin)/2 #180
j=1 #left end point number
n=nrow(data)# rignt end point number
aid=data[1,] #aids line from end point to border
gg=ggplot()
for(i in 1:(n-1)){
delta=data[i+1,2]-data[i,2]
#divide groups
if(abs(delta)>ythd){
gg=gg+geom_line(data=data[j:i,],aes(time,angle))
j=i+1
fst=data[i,2]
stp=data[j,1]-data[i,1]
aid[1,]=data[i,]
#interpolating points
if(delta>0){
rto=fst/(360-(delta))
aid[2:3,1]=data[i,1]+rto*stp
aid[2,2]=ymin
aid[3,2]=ymax
}else{
rto=(360-fst)/(360+delta)
aid[2:3,1]=data[i,1]+rto*stp
aid[2,2]=ymax
aid[3,2]=ymin
}
aid[4,]=data[j,]
#aids line
gg=gg+geom_line(data=aid[1:2,],aes(time,angle))
gg=gg+geom_line(data=aid[3:4,],aes(time,angle))
}
}
#the last group
gg=gg+geom_line(data=data[j:n,], aes(time,angle))
gg
Ожидаемый результат: 