大家好,欢迎收看思路实验室出品的Python入门教程,我是室长。
在上一期我们了解了matplotlib的绘图逻辑,以及画布的生成与设置。那么现在我们就该设置画图区域了。
如果一张画布只需要一个画图区域的话是不需要特意去设置的。而什么情况下需要设置多个画图区域呢?我们先要知道,每个画图区域都带有自己的坐标轴系统。还以之前的大A数据举例,如果你既想对开盘价作图又想对收盘价作图,这两组数据是处在同一个坐标轴系统中的(日期-价格),那么这两组数据就可以画到同一个画图区域里。而如果两组数据的坐标轴系统不一样,或者我就是想分成两个图去画,这时候才需要设置多个画图区域。
设置画图区域有两种方法,一种是横平竖直,向表格那样分成几行几列的,这种情况下的画图区域被称为subplot(子图)。可以使用add_subplot方法将子图赋值给变量:
这个和是什么意思?前边两个数是总共要将画布划分成几行几列的意思,12既1行2列。第三个数就是序数,1行2列一共两个子图,末位的1和2就代表着第一个和第二个子图(注意这里不是Python的从0开始!)。这样写比较简洁但可能不太直观,所以我们可以在每位中加一个逗号,结果是一样的:
可以看到两个带着坐标轴的子图就出现在了画布上。
而另一种方法更加随意,你只需要告诉程序这个画图区域的位置和长宽数值就可以任意生成,这种画图区域叫axes(轴域),可以使用add_axes方法将轴域赋给变量:
add_axes的参数,是一个由四个数字组成的列表,这四个数字是相对于画布长宽的值,也可以认为是画布长宽的百分比。其中前两个是axes原点(左下角)的位置,而后两个则是axes自身的长宽。出来的效果大概是这样的:
虽然创建的方法有所区别,但创建出来的画图区域都是同一类对象,名为AxesSubplot。所以无论使用哪种方法进行创建,在后期我们使用画图区域的方法都是一样的。
虽然现在的坐标轴都是从0到1,但是我们在填入数据的时候matplotlib是会自动调整坐标轴的范围的。我们这里还拿大A的开盘和收盘进行举例:
横纵坐标分别变成了日期和相应的指数。当然这个结果未必完美,我们可以自行规定坐标轴的范围。假如我们只聚焦点到点之间的数据,就可以使用set_ylim方法:
此外我们还可以通过对画图区域使用一些方法来修改坐标轴的样子。
经常作图的同学应该都知道,坐标轴刻度线分为主刻度线和次刻度线。主刻度线自身带有刻度值。如果我们让左图纵坐标轴的主刻度线间隔为50点,就可以访问左图的yaxis对象,调用set_major_locator方法,而方法的参数是一个对象,是从matplotlib.ticker模块中导入的类MultipleLocator的实例,在初始化这个对象时我们向其中填入的是刻度值的间隔即50点:
可以看到左图右图的纵坐标轴不一样了。左边的间隔已经修改为了50点。
而如果我们修改次刻度线,则多了一种选择。这次我们来操作右图,依然是访问yaxis对象,调用的则是set_minor_locator方法,而这个方法里可以填的参数即可以是刚才的MultipleLocator对象,用来按固定值设置次刻度线间隔,也可以使用同样在matplotlib.ticker模块中导入的AutoMinorLocator对主刻度区间进行等分:
设置完坐标轴的刻度值,我们还可以设置坐标刻度的风格,这就要访问画图区域的tick_params对象了:
tick_params的参数如下:
有些图表需要网格线来辅助看图,matplotlib是通过访问gird对象来实现的:
grid的参数如下:
现在画图区域的调整基本搞定了,接下来我们就可以向画图区域添加元素了。当然,元素里的重头戏还是各种各样的图表,接下来我们就将了解各种图表的做法。如果这篇文章对你有所帮助,希望能帮室长点个赞和在看,你的鼓励是室长进步的动力!