Matplotlib中图层叠加问题
matplotlib中的多图层叠加的问题
问题的引出
老板提出希望在之前绘制的降水分布图基础上,叠加上一下线路、变电站的分布。简单一想这个任务很简单,只需要知道线路,变电站经纬度,再叠加到图层即可。但是在实际操作却遇到一个小问题,即如何保证叠加的顺序,通过查阅
matplotlib
手册了解到一个set_zorder
这个属性,可以完美解决图层叠加问题,因此在这里记录以下。
我们先从下面这个例子讲起
1 |
|
这个例子,正是我在作图时遇到的问题,无论我是先画圆,还是先画线条,圆圈总是在线条之下,如何才能把圆圈调换到线条上来呢?这里我就联想到PS处理图片时最终的概念图层
,调换不同的图层的叠加顺序,即会呈现出不一样的图片,那么在matplotlib
中,是否也存在这样的接口,可以让我来设置图层的叠加顺序呢?通过查阅matplolib
的官网终于找到这个大杀器set_zorder
set_zorder
set_zorder
顾名思义,set:设置,z:对象,order:顺序,set_zorder
即设置对象的顺序。matplotlib为多个对象都提供了这个函数。在官网搜索set_zorder即可看到
- matplotlib.artist.Artist.set_zorder (Python method, in matplotlib.artist.Artist.set_zorder)
- matplotlib.axes.Axes.set_zorder (Python method, in matplotlib.axes.Axes.set_zorder)
- matplotlib.axis.Axis.set_zorder (Python method, in matplotlib.axis.Axis.set_zorder)
- matplotlib.axis.Tick.set_zorder (Python method, in matplotlib.axis.Tick.set_zorder)
- matplotlib.axis.XAxis.set_zorder (Python method, in matplotlib.axis.XAxis.set_zorder)
- matplotlib.axis.XTick.set_zorder (Python method, in matplotlib.axis.XTick.set_zorder)
- matplotlib.axis.YAxis.set_zorder (Python method, in matplotlib.axis.YAxis.set_zorder)-
- matplotlib.axis.YTick.set_zorder (Python method, in matplotlib.axis.YTick.set_zorder)
可以看出,针对matplotlib中不同对象,都提供了set_zorder这个method,其规则如下:
Set the zorder for the artist. Artists with lower zorder values are drawn first. order值越小,越先画
因此,在我们上面那个case,就可以完美破解,希望圆圈画在线上,我们只需要把圆圈设个较大的zorder值,线条设个较小的zorder值即可
主要添加了circle.set_zorder(1)
和line.set_zorder(0)
这两行代码
1 |
|
try
最后现学现卖,送朵花花给大家,虽然这个代码不用zorder似乎也可以~~哈哈哈
1 |
|