我正在尝试从许多相同形状的2D numpy数组绘制3D密度图。每个[x,y]坐标都返回强度(在该点处的密度)。
我不知道如何使用matplotlib进行绘制
通过绘制一个2D数组,或使用imshow在某个“ z”切割处获得密度的漂亮切片,而仅绘制该2D数组,我就能成功获得等高线图。
我有一个对象:data
,当我应用方法slice()
并传入0到480之间的整数时,我得到一个'z'截面的2D数组: >
plt.imshow(data.slice(200))
我希望能够通过在data.slice(n)
上迭代n-> 0至480并将其绘制在单个图像上来绘制密度图。
我不确定该怎么做。
答案 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)
# 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)