阅读 133

Matplotlib添加自定义形状

前言

在系列博文的中,我们已经学习了如何自定义绘图的颜色和样式,以使得绘制更加精美、符合审美要求。可以用Matplotlib绘制出复杂而又精美的统计图,同时也讲解了注释的用法,但是这远远不够,很多时候我们还需要绘制复杂形状,考虑到这一需求,Matplotlib提供了大量自定义形状的函数,利用可以在统计图中添加各种复杂形状,以使得所绘制的统计图更加具有高级感。

添加形状

我们已经学习了使用lines原语制作线条,但是在实际中,我们可能需要更多的形状,使用其他形状的方式与lines原语的相同。

import matplotlib.patches as patches import matplotlib.pyplot as plt # 圆形 shape = patches.Circle((0, 0), radius = 1., color = 'm') plt.gca().add_patch(shape) # 四边形 shape = patches.Rectangle((2.5, -.5), 2., 1., color = 'c') plt.gca().add_patch(shape) # 椭圆形 shape = patches.Ellipse((0, -2.), 2., 1., angle = 45., color = 'y') plt.gca().add_patch(shape) # 花状框 shape = patches.FancyBboxPatch((2.5, -2.5), 2., 1., boxstyle = 'sawtooth', color = 'b') plt.gca().add_patch(shape) # 显示 plt.grid(True, alpha=0.3) plt.axis('scaled') plt.show() 复制代码

添加形状

Tips:与使用lines原语一样,使用Matplotlib其它形状原语进行操作时,必须使用pyplot.axis()函数修改图形比例,否则将导致绘制图形不能完整显示。

无论显示哪种形状,其原理都是一样的。在Matplotlib中,形状被描述为名为patch的路径。matplotlib.patches模块中提供了几种形状的路径。与线端一样,仅创建路径并不会在屏幕上渲染它,必须明确使用渲染函数plt.gca()。 matplotlib.patches模块包含很多路径构造类,常用的主要包括:

路径构造类名描述
Circle需要圆心坐标和半径作为参数
Rectangle需要四边形左下角的坐标和边长作为参数
Ellipse需要椭圆中心坐标和两轴半长作为参数
FancyBox这类似于花形框,需要可选参数boxstyle指定样式,可选值包括:"larrow"、"rarrow"、"round"、"round4"、"roundtooth"、"sawtooth"以及"square"等)

自定义形状

除了预定义的形状外,我们还可以使用多边形定义任意形状。

使用多边形

多边形的使用方法与上一部分中路径的使用方法类似:

import numpy as np import matplotlib.patches as patches import matplotlib.pyplot as plt theta = np.linspace(0, 2 * np.pi, 8) points = np.vstack((np.cos(theta), np.sin(theta))).transpose() plt.gca().add_patch(patches.Polygon(points, color = 'm')) plt.grid(True) plt.axis('scaled') plt.show() 复制代码

使用多边形

Tips:matplotlib.patches.Polygon()构造函数接受多边形顶点的坐标列表作为输入参数值。

使用路径属性

所有的路径都可以使用线条及填充的属性:包括linewidth、linestyle、edgecolor、facecolor、hatch等:

import numpy as np import matplotlib.patches as patches import matplotlib.pyplot as plt theta = np.linspace(0, 2 * np.pi, 8) points = np.vstack((np.cos(theta), np.sin(theta))).transpose() plt.gca().add_patch(plt.Circle((0, 0), radius = 1., color = 'm')) plt.gca().add_patch(plt.Polygon(points, closed=None, fill=None, lw = 3., ls = 'dashed', edgecolor = 'c')) plt.grid(True) plt.axis('scaled') plt.show() 复制代码

使用路径属性

Tips:上述示例中,使用带有虚线边(ls = 'dashed')的非填充(fill=None)多边形来绘制多边形轮廓,使用此方法,就不必创建多个Line对象来绘制此多边形。


作者:盼小辉丶
链接:https://juejin.cn/post/7023206803743719460

文章分类
后端
版权声明:本站是系统测试站点,无实际运营。本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至 XXXXXXo@163.com 举报,一经查实,本站将立刻删除。
相关推荐