如何使用matplotlib绘制非矩形2D数据?

时间:2015-04-20 13:13:25

标签: python matplotlib plot map-projections

我正在使用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)

输出如下:

Output of above code

只是为了重申这个问题;我想几乎完全重现这个情节,但在2D中不包括背景轴。

0 个答案:

没有答案