Python 从三维阵列绘制三维散点图
我目前正在尝试使用3D阵列绘制3D散点图。 我在网上找到的关于绘制三维散点图的内容类似于Python 从三维阵列绘制三维散点图,python,matplotlib,plot,scatter-plot,scatter3d,Python,Matplotlib,Plot,Scatter Plot,Scatter3d,我目前正在尝试使用3D阵列绘制3D散点图。 我在网上找到的关于绘制三维散点图的内容类似于 ax.scatter3D(x,y,z)其中x,y,z都是一维阵列。 然而,在我的例子中,我使用numpy的historogramdd生成了一个形状数组(3,3,3) In [61]: h, edges = histogramdd(array([[1,2,4],[4,2,8],[3,2,1],[2,1,2],[2,1,3],[2,1,1],[2,1,4]]),bins=3) In [64]: h Out[64
ax.scatter3D(x,y,z)
其中x
,y
,z
都是一维阵列。
然而,在我的例子中,我使用numpy的historogramdd
生成了一个形状数组(3,3,3)
In [61]: h, edges = histogramdd(array([[1,2,4],[4,2,8],[3,2,1],[2,1,2],[2,1,3],[2,1,1],[2,1,4]]),bins=3)
In [64]: h
Out[64]:
array([[[ 0., 0., 0.],
[ 0., 0., 0.],
[ 0., 1., 0.]],
[[ 3., 1., 0.],
[ 0., 0., 0.],
[ 0., 0., 0.]],
[[ 0., 0., 0.],
[ 0., 0., 0.],
[ 1., 0., 1.]]])
我的问题是,如何将这个
(3,3,3)
解压成与轴相对应的一维数组,以便绘制三维散点图?我想说,您需要4个维度来绘制您创建的直方图。一个想法是使用一个3D散点图来改变标记的大小,从而对每个3D容器中包含的数据点数量的信息进行编码
这是我要做的
将numpy导入为np
a=np.数组([[1,2,4],[4,2,8],[3,2,1],[2,1,2],[2,1,3],[2,1,1],[2,1,4])
h、 边缘=np.组织图D(a,箱=3)
ex,ey,ez=边
x、 y,z=np.meshgrid(np.linspace(ex[0],ex[-1],3),
np.linspace(ey[0],ey[-1],3),
np.linspace(ez[0],ez[-1],3))
来自mpl_toolkits.mplot3d导入Axes3D
将matplotlib.pyplot作为plt导入
图=plt.图()
ax=图添加_子图(111,投影='3d')
最大散点(x.展平(),y.展平(),z.展平(),s=h.展平()*50)
以下是绘图结果:
您是否尝试过重新塑造()?与其说是一维数组,不如说是nx3维数组,如下所示:h.重塑((n,3))。我之所以想从直方图绘制三维散点图,是因为我想看到直方图的分布。如果我重塑它,分布会保留吗?我想我错过了这里的主要思想,告诉我哪里错了:你有一个[x,y,z]形式的许多点的列表,在这个例子中你有[1,2,4],[4,2,8]。。。等等然后构建一个3D直方图,并绘制它。我认为问题在于你需要4维来绘制它(或者3维+颜色)。我错了吗?我实际上总共有4个3d数组[1,2,4],[4,2,8]…我还是不明白,你在3d空间中有点,你把这个空间分成3x3x3个区域(你基本上把3d空间分成27个小立方体)。当你建立直方图时,你正在计算每个小立方体内的点数。正如您在结果中看到的,大多数立方体内部包含零个点,而有些立方体有1或3个点。在三维散点图中,您可以将立方体的位置绘制为三维空间中的一个点,但随后需要更改其他内容来编码立方体中包含的数据点数量的信息。我说得对吗?