提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档
前言
利用python中的Matplotlib画图,有时候我们需要使不同的区域设置不同的背景色,然而,目前已有的函数axvspan和axhspan,只能设定矩形区域,但是若需要设定三角区域或者不规则区域该怎么做呢?找了一圈,只找的支撑矩形区域着色的。
一、axvspan()和axhspan()用法
示例:
axP.axvspan(xmin, xmax, ymin, ymax, facecolor='r', alpha=0.1)
其中,xmin和xmax表示需要设置颜色的x轴范围,指的是真实的长度,而通常ymin和ymax不填,其表示y轴的比例,一般ymin是0,ymax是1。facecolor表示颜色,alpha为透明度。如下即为的结果:
axP.axvspan(0, 1, facecolor='r', alpha=0.1)
若设置ymin和ymax为0.5,0.9时:
axP.axvspan(0, 1, 0.5, 0.9, facecolor='r', alpha=0.1)
这样的话,只能实现矩形区域的着色。那如果要实现矩形区域,该如何呢?可以借助微积分的思想,把三角形分解成很多小矩形分别着色。
二、实现三角形区域着色
根据坐标刻度,取分解的矩形个数,分的越小越好,但是速度可能慢些,这里只取1000个矩形就可以了。
代码如下(示例):
axP.axvspan(AL + (ylim - AL) * (j + 1) / (1000), ylim, AL / ylim + (ylim - AL) / ylim * (j) / 1000, AL / ylim + (ylim - AL) / ylim * (j + 1) / 1000, facecolor='r', alpha=0.1)
这里我画的是一个正方形,xy坐标刻度相同,比较简单,若范围不一样,则需要更复杂一些。其中AL表示三角形的图中绿线的值,ylim表示xy的最大值。效果如下,其实只要确定好范围就行了。
总结
一个投机取巧的方法,实现非矩形区域着色。利用这个思想,只要确定需要的范围,就可以实现区域的着色了。