从许多2D阵列绘制3D密度图

时间:2019-08-09 22:25:40

标签: python-3.x numpy matplotlib

我正在尝试从许多相同形状的2D numpy数组绘制3D密度图。每个[x,y]坐标都返回强度(在该点处的密度)。

我不知道如何使用matplotlib进行绘制

通过绘制一个2D数组,或使用imshow在某个“ z”切割处获得密度的漂亮切片,而仅绘制该2D数组,我就能成功获得等高线图。

我有一个对象:data,当我应用方法slice()并传入0到480之间的整数时,我得到一个'z'截面的2D数组: >

plt.imshow(data.slice(200))

enter image description here

我希望能够通过在data.slice(n)上迭代n-> 0至480并将其绘制在单个图像上来绘制密度图。

我不确定该怎么做。

1 个答案:

答案 0 :(得分:0)

如果要从一侧以密度图的形式查看许多切片,则可以沿给定轴对所有像元进行平均,然后将它们作为图像查看。

import numpy as np
import matplotlib.pyplot as plt    

def plot_projections(d):
    # project onto the appropriate plane by averaging
    d_mean_0 = d.mean(axis=0)
    d_mean_1 = d.mean(axis=1)
    d_mean_2 = d.mean(axis=2)

    plt.subplot(1, 3, 1)
    plt.imshow(d.mean(axis=0), cmap='rainbow')
    plt.subplot(1, 3, 2)
    plt.imshow(d.mean(axis=1), cmap='rainbow')
    plt.subplot(1, 3, 3)
    plt.imshow(d.mean(axis=2), cmap='rainbow')
    plt.show()


# random seeded 10x10x10 array 
d = np.random.randint(0, 10, size=(10,10,10))

plot_projections(d)

enter image description here

# pack matrix with 10s along one plane
for i in range(len(d)):
    d[2][i] = np.array([10,10,10,10,10,10,10,10,10,10])

plot_projections(d)

enter image description here