python - 将 3D 值数组绘制为网格上的彩色点
问题描述
我有一个 (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 这是为了可视化 EM 传播的 FDTD 模拟,所以如果你知道一个更好的方法,那么这也会有帮助)
解决方案
尝试这样的事情
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')
p3d = ax3D.scatter(x, y, z)
plt.show()
推荐阅读
- r - R [闪亮]:尝试输出反应模型摘要时出错
- python - 如何在数据框中创建一个列,该列是基于公共列的另一个数据框中的另一列的总和?
- wordpress - 导致此问题的原因以及如何解决:错误代码:SSL_ERROR_NO_CYPHER_OVERLAP
- excel - VSTO Excel 插件,从其他工作簿复制工作表 (VB.NET)
- java - 'startActivityForResult(android.content.Intent, int)' 已弃用图片
- python - Pytorch DataLoader 输出不可迭代
- cassandra - cassandra 如何使用 2 个表获取数据?
- swift - 为什么我的快速收藏视图不显示任何内容
- python - 错误:找不到 pg_config 可执行文件 - 在尝试对 django 应用程序进行 dockerise 时
- java - Cucumber 只运行一个特征文件而忽略其余的