我正在使用Python进行计算,该计算计算对象的物理属性,角度范围为0&lt; θ&lt; π/ 2和0 < φ&lt; π/ 2(即第一个八分圆)。要显示我正在将它们绘制为3D单位球体上的颜色值的属性。为合理分辨率生成此图是一个相当资源密集的过程,但我没有兴趣从任何其他角度查看该图。
我想要创建的是一个类似于imshow
所创建的2D图像图,除了它应该将球形八分圆的三角形轮廓投影到2D中。请注意我不是问如何将3D数据投影到2D ,而是如何以类似于从θ=π/ 4,φ=观察的球形八分圆的方式显示2D数据π/ 4。
我目前的代码如下。具体细节可能与答案无关,但它可以让我知道我想要做什么。
'''
The code above this point produces three arrays stored in a dictionary
called phs with the three entries using the keys 'I', 'II', 'III. Each
array is a function of theta and phi where
theta = np.linspace( 0, 90, nPoints)
phi = np.linspace( 0, 90, nPoints)
also
types = ('I', 'II', 'III')
'''
# Colormaps
mx = np.maximum( np.maximum( phs['I'], phs['II']), phs['III'])
cmap = cm.ScalarMappable( cmap='BuPu')
cmap.set_array( mx)
clrs = dict()
for type in types:
clrs[type] = cmap.to_rgba( phs[type])
# Convert to Cartesian coordinates with unit radius
xM, yM, zM = plotCartesianFixedR( thetaM, phiM)
# Plot
fig = plt.figure( figsize=(16,7))
ax = dict()
ax['I'] = plt.subplot( 131, projection='3d')
ax['II'] = plt.subplot( 132, projection='3d')
ax['III'] = plt.subplot( 133, projection='3d')
surf = dict()
for type in types:
surf[type] = ax[type].plot_surface( xM, yM, zM, rstride=1, cstride=1,
facecolors=clrs[type], shade=False)
# Set axis properties
ax[type].set_xticklabels([])
ax[type].set_yticklabels([])
ax[type].set_zticklabels([])
ax[type].view_init(elev=45, azim=45)
# Colorbar
plt.colorbar( cmap, shrink=1)
ax['I'].set_title( 'Log$_{10}(|\Delta k|)$ Type I (ssf)')
ax['II'].set_title( 'Log$_{10}(|\Delta k|)$ Type II (sff)')
ax['III'].set_title( 'Log$_{10}(|\Delta k|)$ Type III (fsf)')
# Add title
if title:
plt.suptitle(title)
输出如下:
只是为了重申这个问题;我想几乎完全重现这个情节,但在2D中不包括背景轴。