Skip to content

Latest commit

 

History

History
187 lines (94 loc) · 8.96 KB

3.6-多子图.md

File metadata and controls

187 lines (94 loc) · 8.96 KB

3.6 多子图

除多个坐标轴外,多个子图也是多个图表很好的呈现方式。

3.6.1 双子图(方法一)

最简单的多子图就属双子图了,为了方便在一幅图中呈现多个子图,Plotly封装了一个很好的方法make_subplots,这个方法的使用方式如下。

img

make_subplots的使用方法很简单,使用案例如下(见文件subplot_simple.py)。

img

img

代码运行结果如图3-18所示。

img

图3-18 代码运行结果

3.6.2 双子图(方法二)

除上述方法外,在前面的内容中还使用过一种方法,那就是使用domain参数指定子图坐标轴在视图中的范围,这种方法的应用案例如下(见文件 subplot_simple2.py)。

img

img

代码运行结果如图3-19所示。

img

图3-19 代码运行结果

3.6.3 多子图(方法一)

对于多个子图,绘制方法是一样的,以 make_subplots方法为例(见文件subplot_multi.py),案例代码如下。

img

img

代码运行结果如图3-20所示。

img

图3-20 代码运行结果

3.6.4 多子图(方法二)

同样,也可以使用 domain参数定义每个子图的位置范围(见文件subplot_multi2.py),案例代码如下。

img

img

img

代码运行结果如图3-21所示。

img

图3-21 代码运行结果

3.6.5 分割视图区间

有时想为每个子图定义自己的大小,这就涉及到视图区间的分配问题。make_subplots方法为解决这个问题专门封装了一个参数 specs,这个参数的简单使用方法如下(见文件subplot_specs1.py)。

img

img

代码运行结果如图3-22所示。

specs参数定义了如何分配视图区间,本案例中的“specs=[[{}, {}], [{'colspan': 2},None]]”表示第一行的两个子图平均分配区间,第二行的第一个子图占据 2列的区间,并且不存在第二个子图,分配的结果如图3-22所示。

img

图3-22 代码运行结果

本案例介绍了使用make_subplots方法分割视图,其实还可以分割得更复杂一些(见文件subplot_specs2.py),代码如下。

img

img

代码运行结果如图3-23所示。

img

图3-23 代码运行结果

本案例展示了把5×2的视图区间分配给6个子图,更复杂的图形也可以通过这种方式进行分配。

3.6.6 子图共享坐标轴(方法一)

有时多个子图的X坐标轴区间范围基本一致,从视觉效果来看,这些子图共同使用一个坐标轴效果会更好一些,这就涉及到了本节的内容。对于共享坐标轴,在之前的章节已经有所涉及,本节要讲的是如何在多个子图之间共享坐标轴。

在 Plotly中,共享坐标轴很简单,用前面学过的知识就可以解决(见文件subplot_share_axes.py),代码如下。

img

img

代码运行结果如图3-24所示。

img

图3-24 代码运行结果

3.6.7 子图共享坐标轴(方法二)

除上述方法外,make_subplots也提供了很好的解决方法,通过设置参数shared_yaxes和shared_xaxes就可以控制共享坐标轴。

简单的案例如下,以共享Y坐标轴为例(见文件subplot_share_yaxes.py),代码如下。

img

代码运行结果如图3-25所示。

img

图3-25 代码运行结果

当然,也可以设置两个坐标轴都共享,案例代码如下(见文件 subplot_share_xyaxes.py)。

img

img

代码运行结果如图3-26所示。这个结果与3.5.3节共享坐标轴案例的结果一致,但是使用的是不同的方法。

img

图3-26 代码运行结果

3.6.8 子图坐标轴自定义

有时需要对每个子坐标轴进行自定义显示,这就需要用到本节的内容。在前面的学习中我们知道,在 Plotly中对已经定义好的绘图进行自定义显示,需要修改figure中的layout参数,在这里也不例外。

本案例代码如下(见文件subplot_custom_axes.py)。

img

代码运行结果如图3-27所示。

img

图3-27 代码运行结果

本案例的代码只定义了坐标轴的显示范围、坐标轴类型和是否显示网格,对于其他的画面布局,也可以通过这种方式进行定义。

3.6.9 嵌入式子图

有时需要在一幅图上显示一个大图和一个小图,看起来就像小图嵌入到大图中一样。对于这个需求,Plotly也可以满足。

显示的原理非常简单,就是利用 domain参数,案例代码如下(见文件subplot_insert.py)。

img

img

代码运行结果如图3-28所示。

img

图3-28 代码运行结果

3.6.10 混合图

下面介绍多图组合,本案例绘图的呈现效果特别的炫耀,先看一下炫酷的效果,如图3-29所示。

img

图3-29 混合图效果

对于源代码,由于 3D绘图的内容本书并没有涉及到,因此这里就不进行解读了,对3D图感兴趣的读者可以去官方网站学习相关的知识。本案例的代码如下(见文件subplot_mixed.py)。

img

img

img

img