Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/357.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 从三维阵列绘制三维散点图_Python_Matplotlib_Plot_Scatter Plot_Scatter3d - Fatal编程技术网

Python 从三维阵列绘制三维散点图

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

我目前正在尝试使用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]:
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个点。在三维散点图中,您可以将立方体的位置绘制为三维空间中的一个点,但随后需要更改其他内容来编码立方体中包含的数据点数量的信息。我说得对吗?