Numpy matplotlib pyplot中的三维叠加二维直方图

Numpy matplotlib pyplot中的三维叠加二维直方图,numpy,matplotlib,plot,Numpy,Matplotlib,Plot,我有一堆二维直方图(正方形2D numpy数组),我想在3D中叠加,如下所示: (图片来源:Cardenas,Alfredo E.,et al.“N-乙酰-L-色氨酸酰胺通过膜的独立运输:动力学的实验和模拟”,《物理化学杂志》B 116.9(2012):2739-2750。) 有人有什么好主意怎么做吗?我已经尝试了contourf方法,但结果不是最优的 谢谢。我建议您使用Axes3D.plot\u surface绘制平面,并使用facecolor参数为平面上色,如下所示: import num

我有一堆二维直方图(正方形2D numpy数组),我想在3D中叠加,如下所示:

(图片来源:Cardenas,Alfredo E.,et al.“N-乙酰-L-色氨酸酰胺通过膜的独立运输:动力学的实验和模拟”,《物理化学杂志》B 116.9(2012):2739-2750。)

有人有什么好主意怎么做吗?我已经尝试了contourf方法,但结果不是最优的


谢谢。

我建议您使用
Axes3D.plot\u surface
绘制平面,并使用
facecolor
参数为平面上色,如下所示:

import numpy;
from matplotlib import pyplot;
from matplotlib import cm;
from mpl_toolkits.mplot3d import Axes3D;
pyplot.interactive(True);

# Creat mesh.
X = numpy.arange(-1, 1, 0.1);
Y = numpy.arange(-1, 1, 0.1);
X, Y = numpy.meshgrid(X, Y);

# Create some data to plot.
A = numpy.copy(X);
B = numpy.copy(Y);
C = numpy.sqrt(X**2 + Y**2);
D = numpy.cos(C);
# Normalize data for colormap use.
A -= numpy.min(A); A /= numpy.max(A);
B -= numpy.min(B); B /= numpy.max(B);
C -= numpy.min(C); C /= numpy.max(C);
D -= numpy.min(D); D /= numpy.max(D);

# Create flat surface.
Z = numpy.zeros_like(X);

# Plot
fig = pyplot.figure();
ax = fig.gca(projection='3d');
ax.plot_surface(X, Y, Z, rstride=1, cstride=1, facecolors = cm.coolwarm(A));
ax.plot_surface(X, Y, Z+0.1, rstride=1, cstride=1, facecolors = cm.coolwarm(B));
ax.plot_surface(X, Y, Z+0.2, rstride=1, cstride=1, facecolors = cm.coolwarm(C));
ax.plot_surface(X, Y, Z+0.3, rstride=1, cstride=1, facecolors = cm.coolwarm(D));

为了补充@Bence的答案,可以使用中的代码片段添加额外的垂直色条。具体来说,我使用了以下代码,其中“xxx”是我的数据集,其中Bence绘图中显示的每个层都是
dstack
'd numpy数组中的一个单独的z层:

m = cm.ScalarMappable(cmap=cm.jet)
m.set_array(xxx)
pyplot.colorbar(m)
pyplot.show()

你能详细说明一下你目前的设置中哪些不是最佳的吗?您还应该分享您编写的一些代码和生成的图像。现在,你没有问一个具体的问题。