python 绘图角度不超出范围 [0 360]
python plot angle without jumps outside range [0 360]
我正在尝试在 python 中编写脚本来解决以下问题:
当我绘制一些角度轨迹时,我会跳跃,因为我跟踪的点有时 'jumps' 在范围 [0, 360] 之外。
鉴于这些跳转相当容易识别(请参阅 post 末尾 link 中的 plot
),我试图在 python 中编写一个函数作为角度列表的输入,当它识别出 jumps >300
时,它将从列表的以下值中减去 360,直到找到第二个跳跃。
这是我尝试对此进行编码的尝试,但不幸的是我 运行 是一个无限循环。有人有什么建议吗?
编辑:
我添加了一个包含一些值的列表作为示例
alpha = [356.37, 359.80, 357.14, 359.18, 350.97, 347.35, 348.98, 351.80, 2.74, 354.55, 354.13, 357.82, 3.86, 2.42, 3.57, 1.57, 357, 358]
#take derivative of list of angles alpha
alpha_diff = [0, np.diff(alpha)]
#iterate over each item in alpha_diff and when it finds jumps <-360 you will add 360 until it finds the next jump
for i in alpha_diff:
if alpha_diff[i]<-300:
while alpha_diff[i]<100:
alpha[i] = alpha[i]+360
#similarly if finds jumps > 360 you will subtract 360 until it finds the next jump
if alpha_diff[i]>300:
while alpha_diff[i]<100:
alpha[i] = alpha[i]-360
else:
alpha[i] = alpha
好的,您正在寻找unwrap
。在您需要度数到辐射度的转换之前。这是一个使用您的数据的示例:
import matplotlib.pyplot as plt
import numpy as np
from math import pi
alpha = [356.37, 359.80, 357.14, 359.18, 350.97, 347.35, 348.98, 351.80, 2.74, 354.55, 354.13, 357.82, 3.86, 2.42, 3.57, 1.57, 357, 358]
alpha_rad = [x*pi/180 for x in alpha]
alpha_unwrap= np.unwrap(alpha_rad)
然后,如果你plt.plot(alpha)
你获得:
当plt.plot(alpha_rad)
最后,当plt.plot(alpha_unwrap)
:
我正在尝试在 python 中编写脚本来解决以下问题:
当我绘制一些角度轨迹时,我会跳跃,因为我跟踪的点有时 'jumps' 在范围 [0, 360] 之外。
鉴于这些跳转相当容易识别(请参阅 post 末尾 link 中的 plot
),我试图在 python 中编写一个函数作为角度列表的输入,当它识别出 jumps >300
时,它将从列表的以下值中减去 360,直到找到第二个跳跃。
这是我尝试对此进行编码的尝试,但不幸的是我 运行 是一个无限循环。有人有什么建议吗?
编辑: 我添加了一个包含一些值的列表作为示例
alpha = [356.37, 359.80, 357.14, 359.18, 350.97, 347.35, 348.98, 351.80, 2.74, 354.55, 354.13, 357.82, 3.86, 2.42, 3.57, 1.57, 357, 358]
#take derivative of list of angles alpha
alpha_diff = [0, np.diff(alpha)]
#iterate over each item in alpha_diff and when it finds jumps <-360 you will add 360 until it finds the next jump
for i in alpha_diff:
if alpha_diff[i]<-300:
while alpha_diff[i]<100:
alpha[i] = alpha[i]+360
#similarly if finds jumps > 360 you will subtract 360 until it finds the next jump
if alpha_diff[i]>300:
while alpha_diff[i]<100:
alpha[i] = alpha[i]-360
else:
alpha[i] = alpha
好的,您正在寻找unwrap
。在您需要度数到辐射度的转换之前。这是一个使用您的数据的示例:
import matplotlib.pyplot as plt
import numpy as np
from math import pi
alpha = [356.37, 359.80, 357.14, 359.18, 350.97, 347.35, 348.98, 351.80, 2.74, 354.55, 354.13, 357.82, 3.86, 2.42, 3.57, 1.57, 357, 358]
alpha_rad = [x*pi/180 for x in alpha]
alpha_unwrap= np.unwrap(alpha_rad)
然后,如果你plt.plot(alpha)
你获得:
当plt.plot(alpha_rad)
最后,当plt.plot(alpha_unwrap)
: