首页 > 其他分享 >Matplotlib 中文用户指南 3.8 路径教程

Matplotlib 中文用户指南 3.8 路径教程

时间:2023-05-02 15:03:25浏览次数:50  
标签:教程 路径 Matplotlib patch verts Path ax path 3.8


路径教程

原文: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 patches

verts = [
    (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()

Matplotlib 中文用户指南 3.8 路径教程_贝塞尔曲线

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

代码

顶点

描述

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 patches

verts = [
    (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 中文用户指南 3.8 路径教程_贝塞尔曲线_02

复合路径

所有在 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 路径教程_贝塞尔曲线_03


标签:教程,路径,Matplotlib,patch,verts,Path,ax,path,3.8
From: https://blog.51cto.com/wizardforcel/6239963

相关文章

  • Matplotlib 中文用户指南 3.9 路径效果指南
    路径效果指南原文:Patheffectsguide译者:飞龙协议:CCBY-NC-SA4.0Matplotlib的patheffects模块提供了一些功能,用于将多个绘制层次应用到任何艺术家,并可以通过路径呈现。可以对其应用路径效果的艺术家包括Patch,Line2D,Collection,甚至文本。每个艺术家的路径效果都可以通过set_path_......
  • Matplotlib 中文用户指南 3.7 变换教程
    变换教程原文:TransformationsTutorial译者:飞龙协议:CCBY-NC-SA4.0像任何图形包一样,matplotlib建立在变换框架之上,以便在坐标系,用户数据坐标系,轴域坐标系,图形坐标系和显示坐标系之间轻易变换。在95%的绘图中,你不需要考虑这一点,因为它发生在背后,但随着你接近自定义图形生成的极......
  • 安卓逆向系列教程(二)APK 和 DEX
    安卓逆向系列教程(二)APK和DEX作者:飞龙APKAPK是Android软件包的分发格式,它本身是个Zip压缩包。APK根目录下可能出现的目录和文件有:名称用途META-INF存放元数据AndroidManifest.xml编译后的全局配置文件assets存放资源文件,不会编译classes.dex编译并打包后的源代码lib存放二进......
  • Theano 中文文档 0.9 - 7. 教程
    7.教程译者:Python文档协作翻译小组,原文:Tutorial。本文以CCBY-NC-SA4.0协议发布,转载请保留作者署名和文章出处。Python文档协作翻译小组人手紧缺,有兴趣的朋友可以加入我们,完全公益性质。交流群:467338606。让我们开始一个交互式会话(例如使用python或ipython)并导入Theano。>>>......
  • Python安装教程
    首先在浏览器上搜索网址www.python.org或者搜索python官网点进去。(1)(2)(3)有不同版本的安装包,根据自己的需求下载(4)(5)(6)(7)(8)这里可以自定义安装目录,建议不是c盘都可以(9)(10)(11)之后我们在命令行里看一下安装的python,在命令行里输入python或者是pyt......
  • Django教程
    1.前言复习该课程的时候已经2023年初了,2021年底发布了4.0,由于是复习,所以这里还是使用django3.X版本来进行练习。下面看一下django的版本演变过程。Django是基于Python的Web框架,依赖Python环境,所以需要提前安装好Python解释器。建议安装长期支持 LTS 版......
  • CentOS 7的下载安装配置教程
    CentOS7的下载安装配置教程  CentOS主流版本有7和8,我们这里选择CentOS7进行安装,因为现在8已经不更新了,CentOS8是一个介于实验性版本和稳定商业版本之间的产物,是最后一个版本,一般情况下,我们更追求稳定性,所以我们选择CentOS7。相关下载:  CentOS7镜像:http://mirrors.......
  • 一键部署VSCode_c环境脚本使用教程
       ......
  • Java教程:Springboot项目如何使用Test单元测试
    今天早上来公司领导突然分配了任务,就是简单的测试一下实体的添加修改功能,要使用到Juntil单元测试,目前使用springboot项目,jpa,maven管理,回忆起曾经用到过@Test注解,于是开始唰唰唰的写起了测试咧,然鹅,一顿报错,依赖无法注入,空指针,乱七八糟的一大通,无奈开始借助百度,终于实现了单元测试,......
  • 绘图库Matplotlib的一些使用总结
      Matplotlib是Python语言的绘图库,可视化一些实验输出用起来很方便。简单总结下使用时的一些要点。1、线条(1)线条颜色,可以用关键字参数color(或c)来设置可以用颜色全名或缩写,如‘green’,‘g’16进制,如0000FF(r,g,b)或(r,g,b,a)方式,其中r,g,b,a的取值在[0,1]之间......