当我们想画一个彩色的铅笔的样子如下
暂时叫它铅笔吧。[衰]
首先了解几个基本概念
基本元素 primitives
曲线 2DLines
二维图形 Patches
组合 Collection
Ploygan 多边形
matplotlib.patches.Polygon类是多边形类。
其基类是matplotlib.patches.Patch,它的构造函数:
class matplotlib.patches.Polygon(xy, closed=True, **kwargs)
- xy是一个N×2的numpy array,为多边形的顶点。
- closed为True则指定多边形将起点和终点重合从而显式关闭多边形。
- matplotlib.patches.Polygon类中常用的是fill类,
- 它是基于xy绘制一个填充的多边形,它的定义:
matplotlib.pyplot.fill(*args, data=None, **kwargs)
参数说明 :
- 关于x、y和color的序列,
- 其中color是可选的参数
- 每个多边形都是由其节点的x和y位置列表定义的,
- 后面可以选择一个颜色说明符。
- 可以通过提供多个x、y、[颜色]组来绘制多个多边形。
# 用fill来绘制图形
import matplotlib.pyplot as plt
x = np.linspace(0, 5 * np.pi, 1000)
y1 = np.sin(x)
y2 = np.sin(2 * x)
plt.fill(x, y1, color = "g", alpha = 0.3);
组合 Collections
collections类是用来绘制一组对象的集合,collections有许多不同的子类,
如RegularPolyCollection, CircleCollection, Pathcollection, 分别对应不同的集合子类型。其中
路径(Path)和块(Patch)
在Matplotlib中所有图形都是Artist对象,事实上连Figure和Axes也是Artist对象。
- 路径(Path)是描述图形形状的线条,也就是图形的边线。
- 块(Patch)是一种拥有边线(Path实现)和填充的Artist对象。多边形、椭圆等都是Patch对象。
- Path主要用于组成Patch。
- Path不能直接在图形中显示。可以用ax.add_patch()函数把Patch添加到坐标系中显示。
Path描述的是连线,不能直接显示
Patch是填充连线path的实际体现
有了这些基础知识我们再看这个铅笔的实现
'''
Created on 2023年3月28日
@author: admin
'''
import numpy as np
import matplotlib.pyplot as plt
from matplotlib.patches import Polygon
from matplotlib.collections import PatchCollection
patches = []
y1 = np.array([[1,1], [1,2], [0.5,1.5]])
y2 = np.array([[1,1], [1,2], [2,2],[2,1]])
p1 = Polygon(y1, color=[0, 1, 0])
p2 = Polygon(y2, color=[1, 0, 0])
patches.append(p1)
patches.append(p2)
p=PatchCollection(patches, match_original=True)
fig,ax = plt.subplots()
ax.add_collection(p)
ax.set_xlim([0,3])
ax.set_ylim([0,3])
plt.show()
Polygon构造 了两个多边形,实际上一个是三角形,一个是四边形
p1 = Polygon(y1, color=[0, 1, 0])
p2 = Polygon(y2, color=[1, 0, 0])
再来看y1,y2的坐标构成
y1 = np.array([[1,1], [1,2], [0.5,1.5]])
y2 = np.array([[1,1], [1,2], [2,2],[2,1]])
接着把两个多边形加入path
patches.append(p1)
patches.append(p2)
p=PatchCollection(patches, match_original=True)
最后把path加入绘图逻辑中
fig,ax = plt.subplots()
ax.add_collection(p)