3.6 多子图
除多个坐标轴外,多个子图也是多个图表很好的呈现方式。
最简单的多子图就属双子图了,为了方便在一幅图中呈现多个子图,Plotly封装了一个很好的方法make_subplots,这个方法的使用方式如下。
make_subplots的使用方法很简单,使用案例如下(见文件subplot_simple.py)。
代码运行结果如图3-18所示。
图3-18 代码运行结果
除上述方法外,在前面的内容中还使用过一种方法,那就是使用domain参数指定子图坐标轴在视图中的范围,这种方法的应用案例如下(见文件 subplot_simple2.py)。
代码运行结果如图3-19所示。
图3-19 代码运行结果
对于多个子图,绘制方法是一样的,以 make_subplots方法为例(见文件subplot_multi.py),案例代码如下。
代码运行结果如图3-20所示。
图3-20 代码运行结果
同样,也可以使用 domain参数定义每个子图的位置范围(见文件subplot_multi2.py),案例代码如下。
代码运行结果如图3-21所示。
图3-21 代码运行结果
有时想为每个子图定义自己的大小,这就涉及到视图区间的分配问题。make_subplots方法为解决这个问题专门封装了一个参数 specs,这个参数的简单使用方法如下(见文件subplot_specs1.py)。
代码运行结果如图3-22所示。
specs参数定义了如何分配视图区间,本案例中的“specs=[[{}, {}], [{'colspan': 2},None]]”表示第一行的两个子图平均分配区间,第二行的第一个子图占据 2列的区间,并且不存在第二个子图,分配的结果如图3-22所示。
图3-22 代码运行结果
本案例介绍了使用make_subplots方法分割视图,其实还可以分割得更复杂一些(见文件subplot_specs2.py),代码如下。
代码运行结果如图3-23所示。
图3-23 代码运行结果
本案例展示了把5×2的视图区间分配给6个子图,更复杂的图形也可以通过这种方式进行分配。
有时多个子图的X坐标轴区间范围基本一致,从视觉效果来看,这些子图共同使用一个坐标轴效果会更好一些,这就涉及到了本节的内容。对于共享坐标轴,在之前的章节已经有所涉及,本节要讲的是如何在多个子图之间共享坐标轴。
在 Plotly中,共享坐标轴很简单,用前面学过的知识就可以解决(见文件subplot_share_axes.py),代码如下。
代码运行结果如图3-24所示。
图3-24 代码运行结果
除上述方法外,make_subplots也提供了很好的解决方法,通过设置参数shared_yaxes和shared_xaxes就可以控制共享坐标轴。
简单的案例如下,以共享Y坐标轴为例(见文件subplot_share_yaxes.py),代码如下。
代码运行结果如图3-25所示。
图3-25 代码运行结果
当然,也可以设置两个坐标轴都共享,案例代码如下(见文件 subplot_share_xyaxes.py)。
代码运行结果如图3-26所示。这个结果与3.5.3节共享坐标轴案例的结果一致,但是使用的是不同的方法。
图3-26 代码运行结果
有时需要对每个子坐标轴进行自定义显示,这就需要用到本节的内容。在前面的学习中我们知道,在 Plotly中对已经定义好的绘图进行自定义显示,需要修改figure中的layout参数,在这里也不例外。
本案例代码如下(见文件subplot_custom_axes.py)。
代码运行结果如图3-27所示。
图3-27 代码运行结果
本案例的代码只定义了坐标轴的显示范围、坐标轴类型和是否显示网格,对于其他的画面布局,也可以通过这种方式进行定义。
有时需要在一幅图上显示一个大图和一个小图,看起来就像小图嵌入到大图中一样。对于这个需求,Plotly也可以满足。
显示的原理非常简单,就是利用 domain参数,案例代码如下(见文件subplot_insert.py)。
代码运行结果如图3-28所示。
图3-28 代码运行结果
下面介绍多图组合,本案例绘图的呈现效果特别的炫耀,先看一下炫酷的效果,如图3-29所示。
图3-29 混合图效果
对于源代码,由于 3D绘图的内容本书并没有涉及到,因此这里就不进行解读了,对3D图感兴趣的读者可以去官方网站学习相关的知识。本案例的代码如下(见文件subplot_mixed.py)。