将 3D 值数组绘制为网格上的彩色点

问题描述 投票:0回答:1

我有一个 (X,Y,Z) numpy 数组,它描述了盒子内的每个点。我想绘制该数据的 3D 绘图,其中 [x,y,z] 处的点的颜色是数组中该点的值 到目前为止,我已经尝试过以下内容:

fig = plt.figure()
ax = plt.axes(projection='3d')
data = np.random.rand(3,4,5)
xs = np.arange(0,data.shape[0])
ys = np.arange(0,data.shape[1])
zs = np.arange(0,data.shape[2])
for x in xs:
    for y in ys:
        for z in zs:
            ax.scatter(x, y, z, c = data[x,y,z])
plt.show()

这会在每个索引处正确绘制一个点,但不会根据值更改颜色。我见过一些使用 ravel/reshaping 数据到一维数组中的方法,但是由于该方法一次只绘制一个点,所以会引发错误。

有没有比单独绘制每个点更明智的方法?

(PS这是为了可视化电磁传播的FDTD模拟,所以如果你知道一个更好的方法,那么这也会有帮助)

python numpy matplotlib 3d finite-difference
1个回答
0
投票

尝试这样的事情

import numpy as np
import matplotlib.pyplot as plt

data = np.random.rand(3,4,5)
x = np.indices(data.shape)[0]
y = np.indices(data.shape)[1]
z = np.indices(data.shape)[2]
col = data.flatten()

# 3D Plot
fig = plt.figure()
ax3D = fig.add_subplot(projection='3d')
cm = plt.colormaps['brg']
p3d = ax3D.scatter(x, y, z, c=col, cmap=cm)
plt.colorbar(p3d)

plt.show()

© www.soinside.com 2019 - 2024. All rights reserved.