【发布时间】:2021-04-07 16:49:03
【问题描述】:
我目前正在尝试使用 3D 数组绘制 3D 散点图。
我在网上找到的关于绘制 3D 散点图的内容看起来像
ax.scatter3D(x, y, z) 其中x、y、z 都是一维数组。
但是,就我而言,我正在使用 numpy 的 histogramdd 生成一个 shape(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) 解压缩为与轴对应的一维数组,以便绘制 3d 散点图?
【问题讨论】:
-
您是否尝试过研究 reshape()?而不是一维数组,为什么不把它做成一个 nx3 维数组,像这样:h.reshape((n,3))。
-
为什么要从直方图中绘制 3D 散点图是因为我想查看直方图的分布。如果我重塑分布,分布会保留吗?
-
我想我在这里遗漏了主要思想,告诉我我错在哪里:您有一个 [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 点。在 3D 散点图中,您可以将立方体的位置绘制为 3D 空间中的一个点,但随后您需要更改其他内容来编码有关立方体中包含的数据点数量的信息。我说的对吗?
标签: python matplotlib plot scatter-plot scatter3d