除了绘制各类分析图形(比如柱状图,折线图,饼图等等)以外,matplotlib 也可以在画布上任意绘制各类几何图形。
这对于计算机图形学、几何算法和计算机辅助设计等领域非常重要。

matplitlib 中的 patches 类提供了丰富的几何对象,
本篇抛砖引玉,介绍其中几种常用的几何图形绘制方法。

其实matplitlib封装的各种现成的图形对象(柱状图,折线图,饼图等等)本质也是基于 patches 来绘制的。

1. 多边形类

多边形可以用在地理信息图表中,用来表示地理区域的边界或地理要素的形状;
也可以用来展示数据的分布区域或边界,比如用在散点图中。

几种常用的多边形绘制方式如下:

1.1. 矩形

绘制矩形用Rectangle对象。

import matplotlib.pyplot as plt
import matplotlib.patches as mptch fig = plt.figure(figsize=[6, 6])
ax = fig.add_subplot(111) r1 = mptch.Rectangle(xy=(0.2, 0.3),
height=0.5,
width=0.7,
color="lightblue")
r2 = mptch.Rectangle(xy=(0.4, 0.6),
height=0.3,
width=0.2,
angle=60,
color="lightgreen") ax.add_patch(r1)
ax.add_patch(r2)
plt.show()

Rectangle对象的主要参数

  1. xy:矩形的起始点,也就是左下角的点
  2. height:矩形的高
  3. width:矩形的宽,高和宽设置一样就是正方形
  4. angle:沿着起始点,逆时针旋转的角度
  5. color:矩形的颜色,默认蓝色

代码运行效果

1.2. 任意多边形

任意多边形比较简单,给Polygon对象传入多边形的各个顶点即可。

fig = plt.figure(figsize=[6, 6])
ax = fig.add_subplot(111) #三角形
p1 = mptch.Polygon(xy=[(0.1, 0.1), (0.4, 0.1), (0.3, 0.6)],
color='lightblue')
#四边形
p2 = mptch.Polygon(xy=[(0.5, 0.5), (0.9, 0.5), (0.9, 0.1), (0.6, 0.2)],
color='lightgreen')
ax.add_patch(p1)
ax.add_patch(p2) plt.show()

Polygon对象的主要参数

  1. xy:多边形各个顶点的列表
  2. color:多边形的颜色,默认蓝色

代码运行效果

1.3. 正多边形

虽然用Polygon对象也可以绘制正多边形,但是需要计算各个顶点的坐标位置,很麻烦。
matplotlib提供了专门绘制正多边形的对象CirclePolygon

fig = plt.figure(figsize=[6, 6])
ax = fig.add_subplot(111) p1 = mptch.CirclePolygon(xy=(0.3, 0.3),
radius=0.2,
resolution=6,
color='lightgreen')
p2 = mptch.CirclePolygon(xy=(0.6, 0.6),
radius=0.2,
resolution=8,
color='lightblue')
ax.add_patch(p1)
ax.add_patch(p2) plt.show()

CirclePolygon对象的主要参数

  1. xy:正多边形的中心点坐标
  2. radius:正多边形的外接圆半径
  3. resolution:正多边形的边数
  4. color:正多边形的颜色,默认蓝色

代码运行效果

2. 圆形类

圆形类也是使用比较多的形状。

2.1. 圆和椭圆

绘制圆和椭圆分别用CircleEllipse对象。

fig = plt.figure(figsize=[6, 6])
ax = fig.add_subplot(111) c = mptch.Circle(xy=(0.5, 0.5),
radius=0.4,
color="lightblue")
e = mptch.Ellipse(xy=(0.5, 0.5),
height=0.3,
width=0.4,
color="lightgreen") ax.add_patch(c)
ax.add_patch(e)
plt.show()

Circle对象的主要参数

  1. xy:圆心坐标
  2. radius:圆的半径
  3. color:圆的颜色,默认蓝色

Ellipse对象的主要参数

  1. xy:椭圆心坐标
  2. height:椭圆的高度
  3. width:椭圆的宽度
  4. color:椭圆的颜色,默认蓝色

**PS. **当椭圆的heightwidth设置一样时,椭圆就是圆了。

代码运行效果

3. 圆弧和扇形

除了完整的圆,也可以绘制弧形(Arc对象)和扇形(Wedge对象)。

fig = plt.figure(figsize=[6, 6])
ax = fig.add_subplot(111) #圆弧
a = mptch.Arc(xy=(0.4, 0.7),
width=0.5, height=0.5,
angle=270,
theta1=0, theta2=120,
linewidth=10,
color="lightblue") #扇形
w = mptch.Wedge(center=(0.3, 0.5),
r=0.2,
theta1=30, theta2=330,
color="lightgreen") ax.add_patch(a)
ax.add_patch(w)
plt.show()

Arc对象的主要参数

  1. xy:圆弧的圆心坐标
  2. width:圆弧的宽度
  3. height:圆弧的高度
  4. angle:圆弧朝向的角度,逆时针旋转
  5. theta1:圆弧开始的角度,逆时针旋转
  6. theta2:圆弧结束的角度,逆时针旋转
  7. linewidth:圆弧的粗细
  8. color:圆弧的颜色,默认蓝色

PS. widthheight相等时,圆弧相当于是的一段,不相等时,圆弧相当于是椭圆的一段。
圆弧开始的角度其实就是 angle+theta1,结束的角度是angle+theta2

Wedge对象的主要参数

  1. xy:扇形的圆心坐标
  2. r:扇形的半径
  3. theta1:扇形开始的角度,逆时针旋转
  4. theta2:扇形结束的角度,逆时针旋转
  5. color:扇形的颜色,默认蓝色

代码运行效果:(本来想画个鱼钩钓鱼的抽象效果的,:))

4. 箭头

箭头也是一种比较常用的图形,可用来标注和指示数据的方向或关联性,比如增长或下降趋势;
还可以用来表示数据流向或关系。

matplotlib中用Arrow对象来绘制箭头。

fig = plt.figure(figsize=[6, 6])
ax = fig.add_subplot(111) x, y, dx, dy = 0.1, 0.2, 0.2, 0.2
a1 = mptch.Arrow(x=x, y=y,
dx=dx, dy=dy,
width=0.2, color="lightblue")
a2 = mptch.Arrow(x=x+dx, y=y+dy,
dx=dx, dy=dy,
width=0.4, color="lightgreen") ax.add_patch(a1)
ax.add_patch(a2)
plt.show()

Arrow对象的主要参数

  1. x:箭头的起点X坐标
  2. y:箭头的起点Y坐标
  3. dx:箭头的终点X坐标偏移起点X坐标的值
  4. dy:箭头的终点Y坐标偏移起点Y坐标的值
  5. width:箭头的宽度
  6. color:箭头的颜色,默认蓝色

PS. 其实就是起点坐标(x, y)终点坐标(x+dx, y+dy)

代码运行效果

5. 总结

几何图形是matplotlib最基本的能力,复杂花哨的分析图表归根结底都是这些基本的几何图形。

除了本篇介绍的这些,完整的patches可以参考官方文档:https://matplotlib.org/stable/api/patches_api.html

【matplotlib基础】--几何图形的更多相关文章

  1. 数据分析与展示——Matplotlib基础绘图函数示例

    Matplotlib库入门 Matplotlib基础绘图函数示例 pyplot基础图表函数概述 函数 说明 plt.plot(x,y,fmt, ...) 绘制一个坐标图 plt.boxplot(dat ...

  2. Matplotlib基础图形之散点图

    Matplotlib基础图形之散点图 散点图特点: 1.散点图显示两组数据的值,每个点的坐标位置由变量的值决定 2.由一组不连续的点组成,用于观察两种变量的相关性(正相关,负相关,不相关) 3.例如: ...

  3. Matplotlib基础知识

    Matplotlib基础知识 Matplotlib中的基本图表包括的元素 x轴和y轴 axis水平和垂直的轴线 x轴和y轴刻度 tick刻度标示坐标轴的分隔,包括最小刻度和最大刻度 x轴和y轴刻度标签 ...

  4. matplotlib基础

    Matplotlib 基础 注:本文中的程序都默认引入了numpy库和matplotlib库,并且分别简写为np与plt:如果读者不知道怎么使用numpy库,可以移步到这一博客上进行简单的学习 一.简 ...

  5. Matplotlib基础使用

    matplotlib 一.Matplotlib基础知识 Matplotlib中的基本图表包括的元素 x轴和y轴 axis 水平和垂直的轴线 x轴和y轴刻度 tick 刻度标示坐标轴的分隔,包括最小刻度 ...

  6. 模块简介与matplotlib基础

    模块简介与matplotlib基础 1.基本概念 1.1数据分析 对已知的数据进行分析,提取出一些有价值的信息. 1.2数据挖掘 对大量的数据进行分析与挖掘,得到一些未知的,有价值的信息. 1.3数据 ...

  7. [笔记]SciPy、Matplotlib基础操作

    NumPy.SciPy.Matplotlib,Python下机器学习三大利器.上一篇讲了NumPy基础操作,这节讲讲SciPy和Matplotlib.目前接触到的东西不多,以后再遇到些比较常用的再更新 ...

  8. 第二周 数据分析之展示 Matplotlib基础绘图函数实例

    Pyplot基础图表函数 Pyplot饼图的绘制: Pyplot直方图的绘制: Pyplot极坐标图的绘制: Pyplot散点图的绘制: 单元小结: import numpy as np import ...

  9. python数据图形化—— matplotlib 基础应用

    matplotlib是python中常用的数据图形化工具,用法跟matlab有点相似.调用简单,功能强大.在Windows下可以通过命令行 pip install matplotlib 来进行安装. ...

  10. python画图matplotlib基础笔记

    numpy~~基础计算库,多维数组处理 scipy~~基于numpy,用于数值计算等等,默认调用intel mkl(高度优化的数学库) pandas~~强大的数据框,基于numpy matplotli ...

随机推荐

  1. 聊聊CSS 缓动函数的新成员linear()

    CSS 缓动函数是一种用于控制 CSS 动画过渡效果的函数,可以让动画变得更加自然.这篇文章将介绍一种新的 CSS easing function,即 linear(),它可以模拟出更复杂的缓动效果, ...

  2. Spring Boot 3.1中如何整合Spring Security和Keycloak

    在今年2月14日的时候,Keycloak 团队宣布他们正在弃用大多数 Keycloak 适配器.其中包括Spring Security和Spring Boot的适配器,这意味着今后Keycloak团队 ...

  3. 学生课程分数的Spark SQL分析

    读学生课程分数文件chapter4-data01.txt,创建DataFrame. url = "file:///D:/chapter4-data01.txt" rdd = spa ...

  4. 【后端面经-Java】Java创建线程的方法简介

    目录 1. 线程的基本概念 1.1 线程 1.2 线程状态和生命周期 2. 创建线程的四种方法 2.1 继承Thread类 2.2 实现Runnable接口 2.3 实现Callable接口 2.4 ...

  5. win10搜索框的热门搜索怎么关闭?

    搜索cmd,以管理员模式运行,输入下列命令,重启生效 reg add HKCU\Software\Policies\Microsoft\Windows\explorer /v DisableSearc ...

  6. 论文翻译:2021_Real-Time Denoising and Dereverberation wtih Tiny Recurrent U-Net

    论文地址:微型循环U-Net实时降噪和去混响 论文代码: https://github.com/YangangCao/TRUNet https://github.com/amirpashamobini ...

  7. 使用 OpenAPI 构建 RESTful API 文档

    作为一名开发者,往往需要编写程序的 API 文档,尤其是 Web 后端开发者,在跟前端对接 HTTP 接口的时候,一个好的 API 文档能够大大提高协作效率,降低沟通成本,本文就来聊聊如何使用 Ope ...

  8. 一文详解 Okio 输入输出流

    在 OkHttp 的源码中,我们经常能看到 Okio 的身影,这篇文章,我们把Okio拿出来进行一个详细的介绍学习. 输入输出的概念简述 Okio 简介 工程中引入 Okio API 简介及使用介绍 ...

  9. Day02_Java_作业

    A:选择题 1. 若有定义:int a,b; a=a+10;则执行上述语句后,a的值是(d). A. 10 B. 11 C. 0 D. 编译产生错误 2. 以下选项中变量均已正确定义,合法的赋值语句是 ...

  10. Jenkins主从架构的实现

    一.概要 提到K8S环境下的CI/CD,可以使用的工具有很多,比如Jenkins.Gitlab CI.新兴的drone等,考虑到大多公司在VM环境下都采用 Jenkins 集群来搭建符合需求的 CI/ ...