同様の質問Plot multiple heatmap planes in 3D matplotlib plotを見つけましたが回答がついていませんね。
2d slices in 3d plot #3919を参考にして、3D上に複数平面を配置することはできました。
が、これで力尽きて平面毎に色分布(関数)変える方法やカラーバー配置などは実現できませんでした…
他、参考:
Matplotlib - Wrong overlapping when plotting two 3D surfaces on the same axes
Python
1import matplotlib.pyplot as plt
2import numpy as np
3from mpl_toolkits.mplot3d import Axes3D
4
5n_pts = 10 # x,yのセル分割数および色値の分解能
6
7# 平面毎に色データを作成
8
9# 平面1と2
10ary1 = (np.mgrid[-1:1:1j*n_pts, -1:1:1j*n_pts, -1:1:1j*n_pts]**2).sum(0) # これで色値分布がきまる?
11n_x, n_y, n_z = ary1.shape # n_pts,n_pts,n_pts
12z_cut1 = ary1[:,:,n_z//2]
13min_val1,max_val1 = z_cut1.min(),z_cut1.max()
14z_val1 = (z_cut1-min_val1)/(max_val1-min_val1)
15print(z_cut1.shape)
16print(z_val1)
17
18# 平面3
19ary3 = (np.mgrid[-1:1:1j*n_pts, -1:1:1j*n_pts, -1:1:1j*n_pts]**2).sum(0) # どう変えればいいのか?
20z_cut3 = ary3[:,:,np.abs(n_z)//2]
21min_val3,max_val3 = z_cut3.min(),z_cut3.max()
22z_val3 = (z_cut3-min_val3)/(max_val3-min_val3)
23
24# xy平面に平行で5刻みに平面を配置
25X, Y = np.mgrid[0:n_x,0:n_y]
26Z0 = n_z//2 * np.ones((n_x, n_y))
27Z1,Z2,Z3 = Z0, Z0+5, Z0+10
28
29# カラーマップ
30cm1 = plt.cm.YlOrRd # 黄 -> オレンジ -> 赤
31cm2 = plt.cm.RdPu # 赤 -> 紫
32cm3 = plt.cm.GnBu # 緑 -> 青
33
34fig = plt.figure()
35ax = fig.add_subplot(111,projection='3d')
36ax.plot_surface(X,Y,Z1, facecolors=cm1(z_val1), shade=False)
37ax.plot_surface(X,Y,Z2, facecolors=cm2(z_val1), shade=False)
38ax.plot_surface(X,Y,Z3, facecolors=cm3(z_val3), shade=False)
39plt.show()