python - python matplotlib 中的 4D 绘图

标签 python matplotlib

我对 python 编程很陌生,所以我有点迷失了。

我正在尝试创建一个 scatter3D 图,它绘制时间位置的 X、Y、Z 坐标,并使用颜色作为 4 维来绘制值。

我面临的问题是......对我来说,将变量添加为颜色并添加颜色条来寻求帮助似乎是不可能的。

我在这里解释一下背景:我创建了一个 X、Y、Z 网格和一个数组,用于计算 X、Y、Z 坐标每个位置的值(这是一个三维数组)。

它遵循一个循环,用每个 X、Y、Z 组合的值填充数组,然后我尝试创建图形。

x = np.linspace(0, 15, 15)
y = np.linspace(0, 30, 15)
z = np.linspace(5, 45, 15)

X, Y, Z = np.meshgrid(x, y, z)

sumatorio = np.zeros(shape=(len(X[0, :, 0]), len(Y[:, 0, 0])))

sumatorio_1 = np.zeros(shape=(len(Y[:, 0, 0]), len(Z[0, 0, :])))

sum_total = np.zeros(shape=(len(X[:, 0, 0]), len(Y[0, :, 0]), len(Z[0, 0, 
:])))

c = np.array([])

for i in range(len(X[0, :, 0])):
    for j in range(len(Y[:, 0, 0])):
        sum_1 = X[0, i, 0] + Y[j, 0, 0]
        sumatorio[i, j] = sum_1
            for k in range(len(Z[0, 0, :])):
            sum_2 = sum_1 ** 2.0 + Z[0, 0, k] + X[0, i, 0]
            sumatorio_1[j, k] = sum_2
            sum_total[i, j, k] = sumatorio[i, j] + sumatorio_1[j, k]
fig = plt.figure(figsize=(50.0, 50.0))
ax = fig.add_subplot(111, projection='3d')

ax.scatter3D(X, Y, Z, c=sum_total, cmap='coolwarm', depthshade=0)
fig.colorbar(sum_total)

plt.title("DV at departure from Earth")
ax.set_xlabel("Beginning")
ax.set_ylabel("Time of flight")
ax.set_zlabel("Time of flight 2")

plt.show()

当我执行代码时,出现以下错误:

'c' argument has 15 elements, which is not acceptable for use with 'x' with size 3375, 'y' with size 3375.

似乎当我将数组 sum_total 放在这里时,它无法识别它的形状。

我尝试将颜色添加为c=np.ravel(sum_total),它返回带有颜色的图形,但我认为它没有为每个点提供适当的颜色。

此外,当我使用 np.ravel(sum_total) 创建图形时,颜色栏会出现以下错误:

'numpy.ndarray' object has no attribute 'get_array'

最佳答案

我已经检查了您的代码,并更改了一些内容。

首先,我添加了我猜您想要使用的导入:

import matplotlib
matplotlib.use('Agg')

import numpy as np
import matplotlib.pyplot as plt
from mpl_toolkits.mplot3d import Axes3D

我还添加了一些变量,以使所有内容更易于阅读并且不太可能导致错误:

x = np.linspace(0, 15, 15)
y = np.linspace(0, 30, 15)
z = np.linspace(5, 45, 15)

X, Y, Z = np.meshgrid(x, y, z)

lenX = len(X[0, :, 0])
lenY = len(Y[:, 0, 0])
lenZ = len(Z[0, 0, :])

并在代码中实现了这些变量:

sumatorio = np.zeros(shape=(lenX, lenY))
sumatorio_1 = np.zeros(shape=(lenY, lenZ))
sum_total = np. zeros(shape=(lenX, lenY, lenZ))
c = np.array([])

for i in range(lenX):
    for j in range(lenY):
       sum_1 = X[0, i, 0] + Y[j, 0, 0]
       sumatorio[i, j] = sum_1
       sum_1_2 = sum_1 * sum_1

我更改了“k for 循环”的缩进:

        for k in range(lenZ):
            sum_2 = sum_1_2 + Z[0, 0, k] + X[0, i, 0]
            sum_total[i, j, k] = sumatorio[i, j] + sumatorio_1[j, k]

fig = plt.figure(figsize=(50.0, 50.0))
ax = fig.add_subplot(111, projection='3d')

ax.scatter3D(X, Y, Z, c=sum_total, cmap='coolwarm', depthshade=0)

fig.colorbar 对我来说并没有什么意义,我不太确定你希望用它实现什么,所以我将其注释掉了。

#fig.colorbar(sum_total)

plt.title("DV at departure from Earth")
ax.set_xlabel("Beginning")
ax.set_ylabel("Time of flight")
ax.set_zlabel("Time of flight 2")

plt.show()

这段代码对我来说运行良好。我不太明白它的作用,但我相信你对此了解更多。

关于python - python matplotlib 中的 4D 绘图,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57084861/

相关文章:

python - SQLAlchemy 中表缺少 FROM 子句条目

python - 如何删除此 DataFrame 中不包含 A 的所有行?

Python:ValueError:无法将字符串转换为 float : '0'

matplotlib - 在 Google Colaboratory 上保存或下载 matplotlib 绘图图像

python - 在 python 中使用 matplotlib 创建 3D 曲面图

带有颜色条和图例问题的 Python 散点图

python - 字符串格式化程序 `% + tuple` 是否已弃用?

python - Python 的任何 'pretty' 数据可视化库?

python - 更改数据库后 Django 上的内部服务器错误

python - 绘制二维数据 : heatmap with different colormaps