我有一个包含大量(加权)方向的数据集。我想做一个很好的表示来测试/可视化在某些方向上是否存在方向簇。
首先我制作了三个2D极坐标图:我扔掉了一个维度并绘制了一个'windrose',显示了方向指向其余两个维度的方向。这看起来效果很好:在这些表面中的两个表面中有一个或两个方向簇。然而,数据是3D,我希望看到所有这三个维度中的方向簇指向的位置。
然而,在3D中,问题变得更加困难。我的第一个猜测是制作一个“二维”极坐标图,将两个角度(倾角和方位角)中的两个角度组合在一起,并将其显示为图像。然而,现在,一些箱子在定向球体上表现出比其他箱子更大的表面区域(我认为这被称为极地奇点)。
我在Matlab中发现了这个关于这个问题的老线程:http://www.mathworks.nl/matlabcentral/newsreader/view_thread/236925,但是那里没有一个简单的解决方案:首先我宁愿不使用matlab,但是Python / Scipy,其次,我没有这个工具箱的许可证,第三,我宁愿拥有我知道它的代码。
任何人对Python / Num- / Scipy中的替代解决方案和/或方法都有任何想法? 有没有一种很好的方法在类似尺寸的箱子上铺设2D网格?
答案 0 :(得分:0)
这不是“在类似大小的垃圾箱上铺设2D网格”的解决方案,因为我不确定你的意思,但我认为可视化你的数据可能会很好。
如果您可以获取方向数据(列出3D矢量)并将其标准化,那么这可能会起作用:
import numpy as np
import matplotlib.pyplot as plt
from mpl_toolkits.mplot3d import Axes3D
fig = plt.figure()
ax = fig.add_subplot(111, projection='3d')
orientation = np.random.random((3,50))
weight = np.random.randint(100, size=50)
ax.scatter(orientation[0], orientation[1], zs= orientation[2], s=weight)
plt.show()
它将绘制表示标准化方向向量的点和与每个方向相关的权重大小。
另外,更复杂但更符合您最初的想法,matplotlib 3D绘图教程中有这个片段:
from mpl_toolkits.mplot3d import Axes3D
import matplotlib.pyplot as plt
import numpy as np
fig = plt.figure()
ax = fig.add_subplot(111, projection='3d')
u = np.linspace(0, 2 * np.pi, 100)
v = np.linspace(0, np.pi, 100)
x = 10 * np.outer(np.cos(u), np.sin(v))
y = 10 * np.outer(np.sin(u), np.sin(v))
z = 10 * np.outer(np.ones(np.size(u)), np.cos(v))
ax.plot_surface(x, y, z, rstride=4, cstride=4, color='b')
plt.show()
你需要的只是计算一个颜色图,它是一个数组,代表在图的每个细分中存在的加权密度,并将其作为颜色kwarg传递。 (明天我会调查,但这应该让你开始)