龙空技术网

一步步学Matplotlib炫酷可视化(下)

蛰虫始航 73

前言:

此刻朋友们对“贝塞尔曲线计算xy坐标”大体比较关切,大家都需要了解一些“贝塞尔曲线计算xy坐标”的相关资讯。那么小编在网摘上汇集了一些关于“贝塞尔曲线计算xy坐标””的相关知识,希望大家能喜欢,各位老铁们一起来了解一下吧!

形状绘制深入

在上篇的图表元素调校部分简单提到了在画布上加椭圆、矩形的代码,这里再细化一下Matplotlib可以绘制的形状。整理如下:

#绘制基本形状的框架,以圆形为例import matplotlib.patches as mpatchesfrom matplotlib.collections import PatchCollectionfig, ax = plt.subplots(subplot_kw=dict(aspect="equal")) #设置横纵坐标单位长度一致,也可写 plt.axis('equal')​patches = [] #需渲染的形状集合​circle = mpatches.Circle((50,50),20) #初始化一个圆心在(50,50),半径为20的圆形patches.append(circle)​pcc= PatchCollection(patches,color="#69FFFF") #因patches整合到了PatchCollection对象里,在Circle里写颜色参数好像没用,需要把color传到这里ax.add_collection(pcc)ax.set_ylim(0,100) #设置x,y的展示范围ax.set_xlim(0,100)

.Circle(xy,radius,**kwargs): 绘制一个圆形,第一个参数是圆心坐标,可以传数组或元组,x、y不是单独传的;radius是圆的半径;后续的参数有图形标签(label)、线风格(linestyle)、圆边框宽度(linewidth)、图层顺序(zorder)等;.Ellipse(xy,width,height,angle,**kwargs): 以xy为圆心绘制一个椭圆。Circle()的第二个参数是半径,椭圆需要长轴长度和短轴长度,也就是width和height,angle控制旋转角度,逆时针,按度计算,例如angle=90时,原来一个扁的椭圆就变成了长的椭圆,转了90度;其他参数和Circle()基本一致,下面也不再重复。.Wedge(center, r, theta1, theta2, width, **kwargs): 楔形,像劈掉一部分的圆,是饼图的那一块块饼,可以猜测用pie()绘制饼图时调用了Wedge;center对应圆的xy,即圆心坐标;r是半径,只绘制从theta1到theta2之间的圆形,交换t1和t2可以得到饼的另一个部分,width默认是None,当设置了width会从r-width的部分开始画,得到环状图;.Rectangle(xy,width,height,angle=,**kwargs): 和椭圆的参数写法惊人一致,不同之处在于矩形的xy是左下角坐标而不是中心的坐标;.RegularPolygon(xy,numVertices,radius,orientation,**kwargs): 绘制正多边形xy是图形的中心点,numVertices是顶点个数,如numVertices=5是正五边形;radius:从图形中心xy到顶点的距离;orientation:旋转的度数,是弧度制;.Arrow(x,y,dx,dy, width, **kwargs): 绘制一个箭头,x:箭头尾部的x坐标,y:箭头尾部的y坐标;dx:箭头指向位置距离x的长度,dy同理,width是箭头的宽度,默认值是1,当形状用一般设置得大一些。另外还有hatch参数可以设置箭头的底纹效果;.PathPatch(path, **kwargs): 绘制一系列坐标构成的路径,是非常强大的接口,绘制各种不规则的形状、图标、贝塞尔曲线等一般都直接用Path的接口,和Canvas本身path对象的规则基本一致,东西比较多,不好展开;.FancyBboxPatch(xy,width,boxstyle='round',**kwargs): 边框效果更个性化的图形,前面3个参数就是矩形的参数,boxstyle控制绘制各种效果,boxstyle支持的有circle(圆边)、round(边缘钝化的矩形)、square(方边)、sawtooth(锯齿边)等。下面的整理更形象。

常用绘制形状及参数

基于上面的形状,这里复现一下绘制经典的数据科学维恩图。

画维恩图只需要Circle(xy,r)就够了,因patches整合到了PatchCollection对象里,在Circle里写颜色参数似乎没用,就把color从PatchCollection传入。

#绘制基本形状的框架,以圆形为例import matplotlib.patches as mpatchesfrom matplotlib.collections import PatchCollectionfig, ax = plt.subplots(subplot_kw=dict(aspect="equal")) #设置横纵坐标单位长度一致,也可写 plt.axis('equal')​patches = [] #需渲染的形状集合​circle = mpatches.Circle((50,50),20) #初始化一个圆心在(50,50),半径为20的圆形patches.append(circle)​pcc= PatchCollection(patches,color="#69FFFF") #因patches整合到了PatchCollection对象里,在Circle里写颜色参数好像没用,需要把color传到这里ax.add_collection(pcc)ax.set_ylim(0,100) #设置x,y的展示范围ax.set_xlim(0,100)

用matplotlib绘制维恩图

另外一种画多个圆的方法是用ax.add_artist(ada),示例代码如下:

from mpl_toolkits.axes_grid1.anchored_artists import AnchoredDrawingAreap1 = mpatches.Circle((15, 85), 78,fc='#1EAFAE',alpha=0.62) #(x,y),r,fcolor,alphaada = AnchoredDrawingArea(100,100,0, 0,loc=10, pad=0., frameon=False) #width( in pixels), height, xdescent, ydescent, loc, pad=0.4,ada.drawing_area.add_artist(p1)ax.add_artist(ada)

在matplotlib.image的接口中有图像的读取接口,ax.imshow(mpimg.imread('imagename.png'))可以读取图片并显示,因此Matplotlib即能画饼柱折点等图形,也能画更底层的线段、楔形、多边形,还能读取图片进行处理。常用需求有给图片加文本水印、给图形加图片(如画各国动态排序柱图时给对应柱画上国旗)、用形状裁剪图片等;

文中代码更新于。代码可以直接下载运行。有任何建议欢迎留言交流。

标签: #贝塞尔曲线计算xy坐标