ToB企服应用市场:ToB评测及商务社交产业平台

标题: 【matplotlib基础】--几何图形 [打印本页]

作者: 拉不拉稀肚拉稀    时间: 2023-9-23 17:03
标题: 【matplotlib基础】--几何图形
除了绘制各类分析图形(比如柱状图,折线图,饼图等等)以外,matplotlib 也可以在画布上任意绘制各类几何图形。
这对于计算机图形学、几何算法和计算机辅助设计等领域非常重要。
matplitlib 中的 patches 类提供了丰富的几何对象,
本篇抛砖引玉,介绍其中几种常用的几何图形绘制方法。
其实matplitlib封装的各种现成的图形对象(柱状图,折线图,饼图等等)本质也是基于 patches 来绘制的。
1. 多边形类

多边形可以用在地理信息图表中,用来表示地理区域的边界或地理要素的形状;
也可以用来展示数据的分布区域或边界,比如用在散点图中。
几种常用的多边形绘制方式如下:
1.1. 矩形

绘制矩形用Rectangle对象。
  1. import matplotlib.pyplot as plt
  2. import matplotlib.patches as mptch
  3. fig = plt.figure(figsize=[6, 6])
  4. ax = fig.add_subplot(111)
  5. r1 = mptch.Rectangle(xy=(0.2, 0.3),
  6.                      height=0.5,
  7.                      width=0.7,
  8.                      color="lightblue")
  9. r2 = mptch.Rectangle(xy=(0.4, 0.6),
  10.                      height=0.3,
  11.                      width=0.2,
  12.                      angle=60,
  13.                      color="lightgreen")
  14. ax.add_patch(r1)
  15. ax.add_patch(r2)
  16. plt.show()
复制代码
Rectangle对象的主要参数
代码运行效果

1.2. 任意多边形

任意多边形比较简单,给Polygon对象传入多边形的各个顶点即可。
  1. fig = plt.figure(figsize=[6, 6])
  2. ax = fig.add_subplot(111)
  3. #三角形
  4. p1 = mptch.Polygon(xy=[(0.1, 0.1), (0.4, 0.1), (0.3, 0.6)],
  5.                    color='lightblue')
  6. #四边形
  7. p2 = mptch.Polygon(xy=[(0.5, 0.5), (0.9, 0.5),  (0.9, 0.1), (0.6, 0.2)],
  8.                    color='lightgreen')
  9. ax.add_patch(p1)
  10. ax.add_patch(p2)
  11. plt.show()
复制代码
Polygon对象的主要参数
代码运行效果

1.3. 正多边形

虽然用Polygon对象也可以绘制正多边形,但是需要计算各个顶点的坐标位置,很麻烦。
matplotlib提供了专门绘制正多边形的对象CirclePolygon。
  1. fig = plt.figure(figsize=[6, 6])
  2. ax = fig.add_subplot(111)
  3. p1 = mptch.CirclePolygon(xy=(0.3, 0.3),
  4.                          radius=0.2,
  5.                          resolution=6,
  6.                          color='lightgreen')
  7. p2 = mptch.CirclePolygon(xy=(0.6, 0.6),
  8.                          radius=0.2,
  9.                          resolution=8,
  10.                          color='lightblue')
  11. ax.add_patch(p1)
  12. ax.add_patch(p2)
  13. plt.show()
复制代码
CirclePolygon对象的主要参数
代码运行效果

2. 圆形类

圆形类也是使用比较多的形状。
2.1. 圆和椭圆

绘制圆和椭圆分别用Circle和Ellipse对象。
  1. fig = plt.figure(figsize=[6, 6])
  2. ax = fig.add_subplot(111)
  3. c = mptch.Circle(xy=(0.5, 0.5),
  4.                  radius=0.4,
  5.                  color="lightblue")
  6. e = mptch.Ellipse(xy=(0.5, 0.5),
  7.                   height=0.3,
  8.                   width=0.4,
  9.                   color="lightgreen")
  10. ax.add_patch(c)
  11. ax.add_patch(e)
  12. plt.show()
复制代码
Circle对象的主要参数
Ellipse对象的主要参数
**PS. **当椭圆的height和width设置一样时,椭圆就是圆了。
代码运行效果

3. 圆弧和扇形

除了完整的圆,也可以绘制弧形(Arc对象)和扇形(Wedge对象)。
  1. fig = plt.figure(figsize=[6, 6])
  2. ax = fig.add_subplot(111)
  3. #圆弧
  4. a = mptch.Arc(xy=(0.4, 0.7),
  5.               width=0.5, height=0.5,
  6.               angle=270,
  7.               theta1=0, theta2=120,
  8.               linewidth=10,
  9.               color="lightblue")
  10. #扇形
  11. w = mptch.Wedge(center=(0.3, 0.5),
  12.                 r=0.2,
  13.                 theta1=30, theta2=330,
  14.                 color="lightgreen")
  15. ax.add_patch(a)
  16. ax.add_patch(w)
  17. plt.show()
复制代码
Arc对象的主要参数
PS. width和height相等时,圆弧相当于是的一段,不相等时,圆弧相当于是椭圆的一段。
圆弧开始的角度其实就是 angle+theta1,结束的角度是angle+theta2。
Wedge对象的主要参数
代码运行效果:(本来想画个鱼钩钓鱼的抽象效果的,:))

4. 箭头

箭头也是一种比较常用的图形,可用来标注和指示数据的方向或关联性,比如增长或下降趋势;
还可以用来表示数据流向或关系。
matplotlib中用Arrow对象来绘制箭头。
  1. fig = plt.figure(figsize=[6, 6])
  2. ax = fig.add_subplot(111)
  3. x, y, dx, dy  = 0.1, 0.2, 0.2, 0.2
  4. a1 = mptch.Arrow(x=x, y=y,
  5.                  dx=dx, dy=dy,
  6.                  width=0.2, color="lightblue")
  7. a2 = mptch.Arrow(x=x+dx, y=y+dy,
  8.                  dx=dx, dy=dy,
  9.                  width=0.4, color="lightgreen")
  10. ax.add_patch(a1)
  11. ax.add_patch(a2)
  12. plt.show()
复制代码
Arrow对象的主要参数
PS. 其实就是起点坐标(x, y),终点坐标(x+dx, y+dy)。
代码运行效果

5. 总结

几何图形是matplotlib最基本的能力,复杂花哨的分析图表归根结底都是这些基本的几何图形。
除了本篇介绍的这些,完整的patches可以参考官方文档:https://matplotlib.org/stable/api/patches_api.html


免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!




欢迎光临 ToB企服应用市场:ToB评测及商务社交产业平台 (https://dis.qidao123.com/) Powered by Discuz! X3.4