路径教程

原文:Path Tutorial

译者:飞龙

协议:CC BY-NC-SA 4.0

位于所有matplotlib.patch对象底层的对象是Path,它支持movetolinetocurveto命令的标准几个,来绘制由线段和样条组成的简单和复合轮廓。 路径由(x,y)顶点的(N,2)数组,以及路径代码的长度为 N 的数组实例化。 例如,为了绘制(0,0)(1,1)的单位矩形,我们可以使用这个代码:

import matplotlib.pyplot as plt
from matplotlib.path import Path
import matplotlib.patches as patchesverts = [(0., 0.), # left, bottom(0., 1.), # left, top(1., 1.), # right, top(1., 0.), # right, bottom(0., 0.), # ignored]codes = [Path.MOVETO,Path.LINETO,Path.LINETO,Path.LINETO,Path.CLOSEPOLY,]path = Path(verts, codes)fig = plt.figure()
ax = fig.add_subplot(111)
patch = patches.PathPatch(path, facecolor='orange', lw=2)
ax.add_patch(patch)
ax.set_xlim(-2,2)
ax.set_ylim(-2,2)
plt.show()

下面的路径代码会被接受:

代码 顶点 描述
STOP 1 (被忽略) 标志整个路径终点的标记(当前不需要或已忽略)
MOVETO 1 提起笔并移动到指定顶点
LINETO 1 从当前位置向指定顶点画线
CURVE3 2 (一个控制点,一个终点) 从当前位置,以给定控制点向给定端点画贝塞尔曲线
CURVE4 3 (两个控制点,一个终点) 从当前位置,以给定控制点向给定端点画三次贝塞尔曲线
CLOSEPOLY 1 (点自身被忽略) 向当前折线的起点画线

贝塞尔示例

一些路径组件需要以多个顶点来指定:例如CURVE3是具有一个控制点和一个端点的贝塞尔曲线,CURVE4具有用做两个控制点和端点的三个顶点。 下面的示例显示了CURVE4贝塞尔曲线 - 贝塞尔曲线将包含在起始点,两个控制点和终点的凸包中:

import matplotlib.pyplot as plt
from matplotlib.path import Path
import matplotlib.patches as patchesverts = [(0., 0.),  # P0(0.2, 1.), # P1(1., 0.8), # P2(0.8, 0.), # P3]codes = [Path.MOVETO,Path.CURVE4,Path.CURVE4,Path.CURVE4,]path = Path(verts, codes)fig = plt.figure()
ax = fig.add_subplot(111)
patch = patches.PathPatch(path, facecolor='none', lw=2)
ax.add_patch(patch)xs, ys = zip(*verts)
ax.plot(xs, ys, 'x--', lw=2, color='black', ms=10)ax.text(-0.05, -0.05, 'P0')
ax.text(0.15, 1.05, 'P1')
ax.text(1.05, 0.85, 'P2')
ax.text(0.85, -0.05, 'P3')ax.set_xlim(-0.1, 1.1)
ax.set_ylim(-0.1, 1.1)
plt.show()

复合路径

所有在 matplotlib,Rectangle,Circle,Polygon 等中的简单补丁原语都是用简单的路径实现的。通过使用复合路径,通常可以更有效地实现绘制函数,如hist()bar(),它们创建了许多原语,例如一堆Rectangle,通常可使用复合路径来实现。bar创建一个矩形列表,而不是一个复合路径,很大程度上出于历史原因:路径代码是比较新的,bar在它之前就存在。虽然我们现在可以改变它,但它会破坏旧的代码,所以如果你需要为了效率,在你自己的代码中这样做,例如,创建动画条形图,在这里我们将介绍如何创建复合路径,替换bar中的功能。

我们将通过为每个直方图的条形创建一系列矩形,来创建直方图图表:矩形宽度是条形的宽度,矩形高度是该条形中的数据点数量。首先,我们将创建一些随机的正态分布数据并计算直方图。因为 numpy 返回条形边缘而不是中心,所以下面的示例中bins的长度比n的长度大 1:

# histogram our data with numpy
data = np.random.randn(1000)
n, bins = np.histogram(data, 100)

我们现在将提取矩形的角。 下面的每个leftbottom等数组长度为len(n),其中n是每个直方图条形的计数数组:

# get the corners of the rectangles for the histogram
left = np.array(bins[:-1])
right = np.array(bins[1:])
bottom = np.zeros(len(left))
top = bottom + n

现在我们必须构造复合路径,它由每个矩形的一系列MOVETOLINETOCLOSEPOLY组成。 对于每个矩形,我们需要 5 个顶点:一个代表MOVETO,三个代表LINETO,一个代表CLOSEPOLY。 如上表所示,closepoly的顶点被忽略,但我们仍然需要它来保持代码与顶点对齐:

nverts = nrects*(1+3+1)
verts = np.zeros((nverts, 2))
codes = np.ones(nverts, int) * path.Path.LINETO
codes[0::5] = path.Path.MOVETO
codes[4::5] = path.Path.CLOSEPOLY
verts[0::5,0] = left
verts[0::5,1] = bottom
verts[1::5,0] = left
verts[1::5,1] = top
verts[2::5,0] = right
verts[2::5,1] = top
verts[3::5,0] = right
verts[3::5,1] = bottom

剩下的就是创建路径了,将其添加到PathPatch,将其添加到我们的轴域:

barpath = path.Path(verts, codes)
patch = patches.PathPatch(barpath, facecolor='green',edgecolor='yellow', alpha=0.5)
ax.add_patch(patch)

结果为:

Matplotlib 中文用户指南 3.8 路径教程相关推荐

  1. Matplotlib 中文用户指南 3.9 路径效果指南

    路径效果指南 原文:Path effects guide 译者:飞龙 协议:CC BY-NC-SA 4.0 Matplotlib 的patheffects模块提供了一些功能,用于将多个绘制层次应用到任 ...

  2. Matplotlib 中文用户指南 3.5 艺术家教程

    艺术家教程 原文:Artist tutorial 译者:飞龙 协议:CC BY-NC-SA 4.0 matplotlib API 有三个层级. matplotlib.backend_bases.Fig ...

  3. Matplotlib 中文用户指南 3.7 变换教程

    变换教程 原文:Transformations Tutorial 译者:飞龙 协议:CC BY-NC-SA 4.0 像任何图形包一样,matplotlib 建立在变换框架之上,以便在坐标系,用户数据坐 ...

  4. Matplotlib 中文用户指南 3.1 pyplot 教程

    pyplot 教程 原文:Pyplot tutorial 译者:飞龙 协议:CC BY-NC-SA 4.0 matplotlib.pyplot是一个命令风格函数的集合,使matplotlib的机制更像 ...

  5. Matplotlib 中文用户指南 3.2 图像教程

    图像教程 原文:Image tutorial 译者:飞龙 协议:CC BY-NC-SA 4.0 启动命令 首先,让我们启动 IPython. 它是 Python 标准提示符的最好的改进,它与 Matp ...

  6. Matplotlib 中文用户指南 4.6 编写数学表达式

    编写数学表达式 原文:Writing mathematical expressions 译者:飞龙 协议:CC BY-NC-SA 4.0 你可以在任何 matplotlib 文本字符串中使用子 TeX ...

  7. Matplotlib 中文用户指南 8.1 屏幕截图

    屏幕截图 原文:Screenshots 译者:飞龙 协议:CC BY-NC-SA 4.0 这里你会找到一些示例图和生成它们的代码. 简单绘图 这里是一个带有文本标签的基本的绘图: 源代码 子图示例 多 ...

  8. Matplotlib 中文用户指南 4.5 标注

    标注 原文:Annotation 译者:飞龙 协议:CC BY-NC-SA 4.0 基本标注 使用text()会将文本放置在轴域的任意位置. 文本的一个常见用例是标注绘图的某些特征,而annotate ...

  9. Matplotlib 中文用户指南 4.4 默认字体

    默认字体 原文:Text properties and layout 译者:飞龙 协议:CC BY-NC-SA 4.0 基本的默认字体由一系列rcParams参数控制: rcParam 用法 'fon ...

最新文章

  1. linux查看服务器网络状态
  2. 学python还是不会编程_你真的不学Python吗?学习Python的四大理由!
  3. 大连.Net俱乐部已经加入INETA
  4. 监听以太网(三) Packet32数据结构说明
  5. 虚拟主机TOMCAT配置
  6. vscode插件推荐2020_2020年,前端开发者必备的10个VS Code扩展插件
  7. App Store中国区下架近5万款未提供版号的游戏;微软源代码遭黑客访问;Rust 1.49.0发布
  8. DIV+CSS布局的几点建议
  9. 机器学习技术在植物病害识别中的对比分析(迁移学习做了基础实验)
  10. JAVA POI EXCEL导出工具方法 支持冻结列行和设置不可编辑整行整列
  11. ardupilot rover ardurover 电机相关源码 PreArm servo function 33 unassigned
  12. xshell 密钥身份验证_使用密钥斗篷和大使边缘堆栈进行集中式身份验证
  13. 自动控制原理7.7---离散系统的数字校正
  14. 本科就学人工智能有意义吗?
  15. com.googlecode.genericdao
  16. 手机gps信号弱 服务器设置,手机GPS服务器设置
  17. linux 蓝牙 手机遥控器,嵌入式Android小项目之万能手机遥控器详解
  18. 项目:C++在线测评系统
  19. 【狮子数学】chapter6-05-阿贝尔定理(第99讲)
  20. C++STL详解(一)string类的使用及其模拟实现

热门文章

  1. html属于什么数据类型,javascript包括哪些数据类型?
  2. 心理正常与异常的区分_心理正常与心理异常区分三原则
  3. 13. GD32F103C8T6入门教程-定时器-3路pwm输出-刹车死区保护
  4. STM32 DAC详解
  5. docker 日志_Filebeat 采集 Docker 日志
  6. matlab中符号对象的数据类型是,符号对象(Symbolic Object)的使用
  7. 数字图像处理(四)——图像编码技术(二)
  8. MPI 自定义通用结构和传输
  9. 2d Laser 和 Odomter 内外参数标定工具原理及使用方法
  10. java中的tcp与多线程_Java5 多线程与TCP编程实践