如何平滑嘈杂的矢量场为箭头图

时间:2015-04-05 13:22:38

标签: python matplotlib

我有一个数据集,我想绘制为箭袋图。该集包含星形参数,表示为椭圆(长轴,长轴长度,短轴长度,长轴的轴承(角度)),我想绘制为具有箭头图的矢量场。数据(轴长和轴承)有噪音,我需要平滑它。虽然平滑工作对于轴长I#很好,但是它会受到角度平滑的影响。这里的问题是任何椭圆在视觉上(并且对我来说也是如此)等效于旋转180度的椭圆和椭圆形的椭圆。角度分布在0到180的范围内。此范围大部分的平滑效果很好,除了角度接近0且接近180的角点情况。而角度接近0且接近180的两个椭圆看起来很直观类似的,他们的平均水平"有一个90度的角度,这显然是错误的。查看平滑中断的未平滑数据(白色星星和代表这些星星的绿色箭头)的示例。要清楚,我不需要箭头的方向,在我最后的情节中,我隐藏了箭头。我只需要它的角度/方位,两个角度179.9和0.1的平均值需要180或0而不是90。 知道如何解决这个问题吗? part of quiver plot that shows corner case

1 个答案:

答案 0 :(得分:1)

两个选项:

首先,您可以将角度转换为int并将其扩展到该int的整个范围并利用溢出。例如:

np.astype((ang-180.)/360.*65536, 'uint16')

如果您的平滑功能很简单且没有比较运算符,并且在我看来是一个讨厌的黑客,这可能会有效。

其次,将您的角度旋转任意数量,并多次平滑,选择最佳答案。

我会平滑原件,然后旋转120,平滑,旋转240,平滑。然后取消旋转,然后只保持一致的角度。当然,这会带来3倍以上的性能提升。

编辑: 第三个选项:平滑矢量分量。