画出3D曲面

在python中,我们可以使用mplot3d将表面直接绘制成3D形状。下面例子中,我们将再次使用绘制等值线图所用到的z=f(x,y)函数。

计算出分割线坐标后,就可以用plot_surface( )函数绘制曲面。



修改颜色表,3D表面效果会更加突出,例如,我们可以用cmap关键字参数指各颜色。还可以用voew_init( )函数旋转曲面,修改elev和azim两个关键字参数,从不同的视角查看曲面,其中第一个关键字参数指定从哪个高度查看曲面,第二个参数指定曲面旋转的角度。

例如,你可以使用plt.cm.hot颜色表,把视角设置为elev=30和azim=125,结果如下所示:



3D散点图

在所有3D图形中,散点图最常用。通过这种可视化方法,能够识别数据点的分布是否遵循某种特定的趋势,尤其是可以识别它们是否有聚集成簇的趋势。

下面的这个例子中,我们仍旧使用scatter( )函数,使用方法跟绘制2D图形相同,但是要将其应用于Axes 3D对象。这样做,你可以多次调用scatter( )函数,在同一个3D对象中显示不同的序列。



3D条状图

数据分析常用的另一种3D图形是3D条状图。要绘制这种图表,同样是将bar( )函数应用于Axes3D对象。如果定义了多个序列,可以在同一个3D对象上多次调用bar( )函数。



多面板图形

至此,你已经见过多种用图表表示数据的方法,也见过把一幅图分为多幅子图的情况。这一节将进一步加深你对这个主题的理解,我们来分析几种更为复杂的情况。

在其他子图中显示子图

我们现在来介绍一种更为高级的方式:把图表放入框架,在其他图表中显示。既然我们在说框架,也就是Axes对象,那么我们就需要把主Axes对象(也就是说主图表)跟防止另一个Axes对象实例的框架分开。用figure( )函数取到Figure对象,用add_axes( )函数在它上面定义两个Axes对象。结果如下所示:



为了更好地理解这种图形模式,你可以为Axes对象的plot( )方法传入两列数据,所实现的效果如下所示:



子图网格

前面我们已经说过如何生成子图 。而要把图形分成多个区域,添加多个子图,可以用subplots( )函数,方法也很简单。matplotlib的GridSpec( )函数可以用来管理更为复杂的情况。它把绘图区域分成多个子区域,你可以把一个或多个子区域分配给每一幅子图,因此可以得到如下所示的图表,其中每幅子图的大小、方位各不相同。



既然我们已经知道如何把不同的区域分配给子图,我们来看一下这些子图的使用方法。事实上,你可以在add_subplot( )函数返回的Axes对象上调用plot( )函数,绘制相应的图形。