【问题标题】:Plotting 3D array of values as coloured points on a grid将 3D 值数组绘制为网格上的彩色点
【发布时间】:2021-08-24 10:14:01
【问题描述】:

我有一个 (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 模拟,所以如果您知道一种更好的方法,那么这也会有所帮助)

【问题讨论】:

    标签: python numpy matplotlib 3d finite-difference


    【解决方案1】:

    试试这样的

    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()
    

    【讨论】:

    • p3d = ax3D.scatter(x,y,z, c=col) 似乎有效,谢谢!
    • 不完整/可运行的代码,也应编辑错误,以造福社区。​​span>
    • @swatchai 我添加了导入。如果您安装了 matplotlib 和 numpy,它应该可以工作。
    猜你喜欢
    • 2018-05-30
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-09-16
    • 1970-01-01
    • 1970-01-01
    • 2021-10-21
    • 1970-01-01
    相关资源
    最近更新 更多