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

简介: 路径教程 原文:Path Tutorial 译者:飞龙 协议:CC BY-NC-SA 4.0位于所有matplotlib.patch对象底层的对象是Path,它支持moveto,lineto,curveto命令的标准几个,来绘制由线段和样条组成的简单和复合轮廓。

路径教程

原文: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()

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

代码 顶点 描述
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,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)

结果为:

相关文章
|
3月前
|
机器学习/深度学习 计算机视觉 Python
Matplotlib 教程
Matplotlib 教程
37 1
|
4月前
|
数据可视化 Python
Matplotlib 教程 之 Seaborn 教程 10
Seaborn 是基于 Matplotlib 的 Python 数据可视化库,专注于统计图形的绘制。它提供了高级接口和美观的默认主题,简化了复杂图形的生成过程。Seaborn 支持多种图表类型,如散点图、折线图、柱状图、热图等,并特别强调视觉效果。例如,使用 `sns.violinplot()` 可以轻松绘制展示数据分布的小提琴图。
46 1
|
4月前
|
数据可视化 Python
Matplotlib 教程 之 Seaborn 教程 9
Seaborn 是基于 Matplotlib 的 Python 数据可视化库,专注于统计图形的绘制。它提供了高级接口和美观的默认主题,简化了复杂图形的生成过程。本文介绍了 Seaborn 的主要功能和绘图函数,包括热图 `sns.heatmap()` 的使用方法和示例代码。
31 1
|
4月前
|
数据可视化 数据挖掘 Python
Matplotlib 教程 之 Seaborn 教程 8
Seaborn 是基于 Matplotlib 的 Python 数据可视化库,专注于统计图形的绘制。它提供了简洁的高级接口和美观的默认样式,支持多种图表类型,如散点图、折线图、柱状图、热图等,特别适合于数据分析和展示。例如,使用 `sns.boxplot()` 可以轻松绘制箱线图,展示数据的分布情况。
50 3
|
4月前
|
数据可视化 DataX Python
Matplotlib 教程 之 Seaborn 教程 6
Seaborn 是基于 Matplotlib 的 Python 数据可视化库,专注于绘制统计图形。它提供高级接口和美观的默认主题,简化了复杂图形的绘制过程。本文档介绍了 Seaborn 的主要绘图函数,如 `sns.lineplot()` 用于绘制变量变化趋势的折线图,并给出了示例代码。
49 0
|
4月前
|
数据可视化 Python
Matplotlib 教程 之 Seaborn 教程 4
Seaborn 是基于 Matplotlib 的 Python 数据可视化库,专注于绘制统计图形。它提供了高级接口和美观的默认主题,简化了复杂图形的绘制过程。以下示例展示了如何使用 Seaborn 和 Matplotlib 绘制一个简单的柱状图,展示不同产品的销售情况。
27 0
|
4月前
|
数据可视化 Python
Matplotlib 教程 之 Seaborn 教程 2
Seaborn 是基于 Matplotlib 的 Python 数据可视化库,专注于统计图形的绘制,提供高级接口和美观的默认主题,支持散点图、折线图等多种图表类型,安装简便,可通过 `pip install seaborn` 完成。Seaborn 设计注重美观与易用性,内置多种主题如 darkgrid、whitegrid 等,便于用户快速生成高质量的统计图表。
42 3
|
4月前
|
Python
Matplotlib 教程 之 Matplotlib 中文显示 4
Matplotlib 中文显示教程,介绍如何通过设置字体参数或下载支持中文的字体库(如思源黑体)来实现在 Matplotlib 中正确显示中文。示例代码展示了如何使用思源黑体设置图表标题和轴标签的中文显示。
33 0
|
4月前
|
Python
Matplotlib 教程 之 Matplotlib 中文显示 3
Matplotlib 是一个强大的绘图库,但默认不支持中文显示。通过设置字体参数或下载支持中文的字体库,可以解决这一问题。例如,设置 `plt.rcParams['font.family']` 为 `'Heiti TC'`,即可在图表中正确显示中文标题和标签。
28 0
|
4月前
|
Linux iOS开发 MacOS
Matplotlib 教程 之 Matplotlib 中文显示 2
Matplotlib 中文显示教程,介绍如何通过设置 Matplotlib 字体参数或下载支持中文的字体库来实现中文显示。适用于 Windows、Linux 和 macOS 系统,确保图表中文本正确呈现。
49 0