Matplotlib绘图基础之几何图形的绘制详解

 更新时间:2023年08月09日 09:11:16   作者:databook  
除了绘制各类分析图形(比如柱状图,折线图,饼图等等)以外,matplotlib 也可以在画布上任意绘制各类几何图形,下面小编就来和大家讲讲如何绘制常见的几种几何图形吧

除了绘制各类分析图形(比如柱状图,折线图,饼图等等)以外,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对象的主要参数

  • xy:矩形的起始点,也就是左下角的点
  • height:矩形的高
  • width:矩形的宽,高和宽设置一样就是正方形
  • angle:沿着起始点,逆时针旋转的角度
  • 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对象的主要参数

  • xy:多边形各个顶点的列表
  • 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对象的主要参数

  • xy:正多边形的中心点坐标
  • radius:正多边形的外接圆半径
  • resolution:正多边形的边数
  • 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对象的主要参数

  • xy:圆心坐标
  • radius:圆的半径
  • color:圆的颜色,默认蓝色

Ellipse对象的主要参数

  • xy:椭圆心坐标
  • height:椭圆的高度
  • width:椭圆的宽度
  • 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对象的主要参数

  • xy:圆弧的圆心坐标
  • width:圆弧的宽度
  • height:圆弧的高度
  • angle:圆弧朝向的角度,逆时针旋转
  • theta1:圆弧开始的角度,逆时针旋转
  • theta2:圆弧结束的角度,逆时针旋转
  • linewidth:圆弧的粗细
  • color:圆弧的颜色,默认蓝色

PS. widthheight相等时,圆弧相当于是的一段,不相等时,圆弧相当于是椭圆的一段。

圆弧开始的角度其实就是 angle+theta1,结束的角度是angle+theta2

Wedge对象的主要参数

  • xy:扇形的圆心坐标
  • r:扇形的半径
  • theta1:扇形开始的角度,逆时针旋转
  • theta2:扇形结束的角度,逆时针旋转
  • 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对象的主要参数

  • x:箭头的起点X坐标
  • y:箭头的起点Y坐标
  • dx:箭头的终点X坐标偏移起点X坐标的值
  • dy:箭头的终点Y坐标偏移起点Y坐标的值
  • width:箭头的宽度
  • color:箭头的颜色,默认蓝色

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

代码运行效果

5. 总结

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

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

以上就是Matplotlib绘图基础之几何图形的绘制详解的详细内容,更多关于Matplotlib图形的资料请关注脚本之家其它相关文章!

相关文章

  • python下载安装requests库的简单步骤

    python下载安装requests库的简单步骤

    这篇文章主要给大家介绍了关于python下载安装requests库的简单步骤,使用Python的requests库下载文件是一种常见的操作,文中通过图文介绍的非常详细,需要的朋友可以参考下
    2023-11-11
  • Pandas提取含有指定字符串的行(完全匹配,部分匹配)

    Pandas提取含有指定字符串的行(完全匹配,部分匹配)

    本文主要介绍了Pandas提取含有指定字符串的行(完全匹配,部分匹配),文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2023-02-02
  • python 将字符串转换成字典dict

    python 将字符串转换成字典dict

    将字符串转化成字典dict类型?这个可以用python的标准库simplejson 转换为JSON格式。
    2013-03-03
  • Python 代码实现各种酷炫功能

    Python 代码实现各种酷炫功能

    这篇文章主要介绍了Python 代码实现各种酷炫功能,生成二维码、生成词云、批量抠图、文字情绪识别等功能分享,需要的小伙伴可以参考一下
    2022-03-03
  • 如何使用python切换hosts文件

    如何使用python切换hosts文件

    这篇文章主要介绍了如何使用python切换hosts文件,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下
    2020-04-04
  • 将Python代码打包成可调用SDK的四种方法小结(适用于移动端 App)

    将Python代码打包成可调用SDK的四种方法小结(适用于移动端 App)

    Python是一门功能强大、生态丰富的语言,广泛用于数据处理、机器学习和后端服务,然而,Python并不是原生的移动端开发语言,如果希望在移动端App中调用Python代码,最好的方式是将Python代码打包成SDK,所以本文给大家介绍了几种Python代码打包成可调用SDK的方法
    2025-04-04
  • 基于python编写的五个拿来就能用的炫酷表白代码分享

    基于python编写的五个拿来就能用的炫酷表白代码分享

    七夕快到了,所以本文小编将给给大家介绍五种拿来就能用的炫酷表白代码,无限弹窗表白,爱心发射,心动表白,玫瑰花等表白代码,需要的小伙伴快来试试吧
    2023-08-08
  • 教你利用PyTorch实现sin函数模拟

    教你利用PyTorch实现sin函数模拟

    这篇文章主要给大家介绍了关于教你利用PyTorch实现sin函数模拟的相关资料,文中通过实例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下
    2022-01-01
  • python网络编程学习笔记(五):socket的一些补充

    python网络编程学习笔记(五):socket的一些补充

    前面已经为大家介绍了python socket的一些相关知识,这里为大家补充下,方便需要的朋友
    2014-06-06
  • Django中数据库的数据关系:一对一,一对多,多对多

    Django中数据库的数据关系:一对一,一对多,多对多

    今天小编就为大家分享一篇关于Django中数据库的数据关系:一对一,一对多,多对多,小编觉得内容挺不错的,现在分享给大家,具有很好的参考价值,需要的朋友一起跟随小编来看看吧
    2018-10-10

最新评论