Skip to content

Patch类及其子类

导入模块
from matplotlib.patches import Patch, 

                               Rectangle, 
                               Polygon, 
                               Wedge, 
                               Shadow,

                               FancyBboxPatch, 
                               BoxStyle, 

                               FancyArrowPatch, 
                               ArrowStyle, 
                               ConnectionStyle, 


from matplotlib.path import Path

Patch父类

matplotlib.patches.Patch — Matplotlib 3.10.0 documentation

Hatch style reference — Matplotlib 3.10.1 documentation

Patch父类
Patch(transform=ax.transAxes,   # (1)!

      fill=True,                # (2)!
      facecolor="red",          # (3)!
      linestyle="--",           # (4)!
      linewidth=10,             # (5)!
      antialiased=False,        # (6)!
      capstyle="round",         # (7)!
      joinstyle="bevel",        # (8)!
      hatch="+",                # (9)!
      hatch_linewidth=2,        # (10)!
      edgecolor="blue",         # (11)!
      # color="red",            (12)
      alpha=1,                  # (13)!

      label="Patch",            # (14)!
      gid="1",                  # (15)!
      visible=True,             # (16)!
      zorder=1,                 # (17)!
      rasterized=True,          # (18)!
      in_layout=True            # (19)!
      )
  1. 参考坐标系
  2. 是否填充
  3. 填充色(facecolor/fc)
  4. 边框线型(linestyle/ls)
  5. 边框线宽(linewidth/lw)
  6. 边框线抗锯齿渲染(antialiased/aa)
  7. 边框线端点样式: 可选'butt'(默认), 'projecting', 'round'(FancyArrowPatch子类默认)
  8. 边框线转折样式: 可选'miter'(默认), 'round'(FancyArrowPatch子类默认), 'bevel'
  9. 框内线型:可选'/', '\', '|', '-', '+', 'x', 'o', 'O', '.', '*',可组合重复
  10. 框内线宽
  11. 边框线及框内线色(edgecolor/ec)
  12. 覆盖facecolor和edgecolor
  13. 透明度
  14. 标签(用于图例)
  15. group id
  16. 是否可见
  17. 绘制优先级:值越低越优先
  18. 强制栅格化(bitmap)绘图以进行矢量图形输出
  19. 是否包含在layout计算中

img.png

Rectangle子类

matplotlib.patches.Rectangle — Matplotlib 3.10.1 documentation

通过锚点 xy 及其widthheight定义的矩形。矩形在 x 方向上从 xy[0] 延伸到 xy[0] + width ,在 y 方向上从 xy[1] 延伸到 xy[1] + height 。可以将 xy 视为左下角,但 xy 实际上是哪个角取决于轴的方向和宽度和高度的符号;例如,如果 x 轴被反转或宽度为负,则 xy 将是右下角。

Rectangle子类
fig = plt.figure(figsize=(8, 8), dpi=100, layout="constrained")
ax = fig.add_subplot(1, 1, 1)

patch = Rectangle(xy=(0.2, 0.2),                # (1)!
                  width=0.2,                    # (2)!
                  height=0.2,                   # (3)!
                  transform=ax.transAxes,       # (4)!
                  rotation_point=(0.3, 0.2),    # (5)!
                  angle=45,                     # (6)!

                  # Patch父类参数
                  facecolor="red",
                  linestyle="--",
                  linewidth=2,
                  hatch="/",
                  hatch_linewidth=2,
                  edgecolor="green", 
                  alpha=0.5
                  )
ax.add_patch(patch)
ax.grid()

plt.show()
  1. 左下角锚点坐标(具体取决于axis的方向以及width、height参数的正负)
  2. 宽度
  3. 高度
  4. 参考坐标系
  5. 旋转中心坐标:可选'xy'(默认), 'center', 坐标(x, y)
  6. 绕旋转中心逆时针旋转角度(°)

img_1.png

Polygon子类

matplotlib.patches.Polygon — Matplotlib 3.10.1 documentation

Polygon子类
fig = plt.figure(figsize=(8, 8), dpi=100, layout="constrained")
ax = fig.add_subplot(1, 1, 1)

patch = Polygon(xy=[[0.1, 0.1], [0.1, 0.2], [0.2, 0.2], [0.2, 0.1], [0.6, 0.2]],    # (1)!
                closed=True,                                                        # (2)!

                # Patch父类参数
                facecolor="red",
                linestyle="--",
                linewidth=2,
                hatch="/",
                hatch_linewidth=2,
                edgecolor="green",
                alpha=0.5
                )
ax.add_patch(patch)
ax.grid()

plt.show()
  1. 多边形节点坐标数组
  2. 是否绘制封闭线

img_2.png

Wedge子类

matplotlib.patches.Wedge — Matplotlib 3.10.1 documentation

一个以 x, y (center)为中心,半径为r的扇形,从theta1逆时针扫到theta2(以°为单位)。如果给出了width,则从内径r-width到外径r绘制部分扇形。

Wedge子类
fig = plt.figure(figsize=(8, 8), dpi=100, layout="constrained")
ax = fig.add_subplot(1, 1, 1)

patch = Wedge(center=(0.5, 0.5),    # (1)!
              r=0.5,                # (2)!
              theta1=45,            # (3)!
              theta2=135,           # (4)!
              width=0.3,            # (5)!

              # Patch父类参数
              facecolor="red",
              linestyle="--",
              linewidth=2,
              hatch="/",
              hatch_linewidth=2,
              edgecolor="green",
              alpha=0.5
              )
ax.add_patch(patch)
ax.grid()

plt.show()
  1. 扇形中心
  2. 半径
  3. 起始角度
  4. 终止角度
  5. 宽度

img_3.png

Shadow子类

matplotlib.patches.Shadow — Matplotlib 3.10.1 documentation

创建给定补丁的阴影。默认情况下,阴影将与补丁具有相同的面颜色,但会变暗。可以通过 shade 参数控制暗度。

Shadow子类
fig = plt.figure(figsize=(8, 8), dpi=100, layout="constrained")
ax = fig.add_subplot(1, 1, 1)

patch = Wedge(center=(0.5, 0.5),
              r=0.5,
              theta1=45,
              theta2=135,
              width=0.3,

              # Patch父类参数
              facecolor="red",
              linestyle="--",
              linewidth=2,
              hatch="/",
              hatch_linewidth=2,
              edgecolor="green",
              alpha=0.5
              )
ax.add_patch(patch)

patch = Shadow(patch,        # (1)!
               ox=0.1,       # (2)!
               oy=-0.1,      # (3)!
               shade=0.2,    # (4)!

               # Patch父类参数
               # facecolor="red",
               linestyle="--",
               linewidth=2,
               hatch="/",
               hatch_linewidth=2,
               edgecolor="green",
               alpha=0.5
               )
ax.add_patch(patch)

ax.grid()
plt.show()
  1. 待创建阴影的补丁
  2. 数据坐标中阴影的偏移量,按 dpi/72 的比例缩放
  3. 数据坐标中阴影的偏移量,按 dpi/72 的比例缩放
  4. 阴影的深浅与原始颜色之间的关系。如果为 1,则阴影为黑色;如果为 0,则阴影与补丁颜色相同

img_4.png

StepPatch子类

matplotlib.patches.StepPatch — Matplotlib 3.10.1 documentation

FancyBboxPatch子类

matplotlib.patches.FancyBboxPatch — Matplotlib 3.10.0 documentation

matplotlib.patches.BoxStyle — Matplotlib 3.10.0 documentation

Drawing fancy boxes — Matplotlib 3.10.1 documentation

"square, pad=0.3" == BoxStyle.Square(pad=0.3) == BoxStyle("square", pad=0.3) == BoxStyle("square, pad=0.3")

BoxStyle
BoxStyle子类 名称 属性
BoxStyle.Square() "square" pad=0.3
BoxStyle.Circle() "circle"
BoxStyle.Ellipse() "ellipse"
BoxStyle.LArrow() "larrow"
BoxStyle.RArrow() "rarrow"
BoxStyle.DArrow() "darrow"
BoxStyle.Round() "round" pad=0.3, rounding_size=pad
BoxStyle.Round4() "round4" pad=0.3, rounding_size=pad/2
BoxStyle.Sawtooth() "sawtooth" pad=0.3, tooth_size=pad/2
BoxStyle.Roundtooth() "roundtooth"

img_5.png

FancyBboxPatch子类
fig = plt.figure(figsize=(8, 8), dpi=100, layout="constrained")
ax = fig.add_subplot(1, 1, 1)

"""
fancy box实际属性值(如pad):
    水平方向:pad = mutation_scale x pad
    垂直方向:pad = mutation_aspect x mutation_scale x pad
"""
patch = FancyBboxPatch(xy=(0.4, 0.4),                 # (1)!
                       width=0.1,                     # (2)!
                       height=0.1,                    # (3)!
                       transform=ax.transAxes,        # (4)!
                       boxstyle="square, pad=0.1",    # (5)!
                       mutation_scale=0.5,
                       mutation_aspect=2,

                       # Patch父类参数
                       facecolor="red",
                       linestyle="--",
                       linewidth=2,
                       hatch="/",
                       hatch_linewidth=2,
                       edgecolor="green",
                       alpha=0.5
                       )
ax.add_patch(patch)
ax.grid()

plt.show()
  1. 左下角坐标
  2. 宽度
  3. 高度
  4. 参考坐标系统
  5. fancy box类型及属性

img_6.png

FancyArrowPatch子类

matplotlib.patches.FancyArrowPatch — Matplotlib 3.10.0 documentation

matplotlib.patches.ArrowStyle — Matplotlib 3.10.0 documentation

matplotlib.patches.ConnectionStyle — Matplotlib 3.10.0 documentation

"|-|, widthA=20, widthB=20, angleA=45, angleB=45" == ArrowStyle("|-|, widthA=20, widthB=20, angleA=45, angleB=45") == ArrowStyle("|-|", widthA=20, widthB=20, angleA=45, angleB=45) == ArrowStyle.BarAB(widthA=20, widthB=20, angleA=45, angleB=45)

ArrowStyle
ArrowStyle子类 名称 属性
ArrowStyle.Curve() "-" None
ArrowStyle.CurveA() "<-" head_length=0.4, head_width=0.2,
widthA=1.0, widthB=1.0,
lengthA=0.2, lengthB=0.2,
angleA=0, angleB=0,
scaleA=mutation_size,
scaleB=mutation_size
ArrowStyle.CurveB() "->"
ArrowStyle.CurveAB() "<->"
ArrowStyle.CurveFilledA() "<|-"
ArrowStyle.CurveFilledB() "-|>"
ArrowStyle.CurveFilledAB() "<|-|>"
ArrowStyle.BracketA() "]-" widthA=1.0, widthB=1.0,
lengthA=0.2, lengthB=0.2,
angleA=0, angleB=0
ArrowStyle.BracketB() "-["
ArrowStyle.BracketAB() "]-["
ArrowStyle.BarAB() "|-|" widthA=1.0, widthB=1.0,
angleA=0, angleB=0
ArrowStyle.BracketCurve() "]->" widthA=1.0,
lengthA=0.2,
angleA=0
ArrowStyle.CurveBracket() "<-[" widthB=1.0,
lengthB=0.2,
angleB=0
ArrowStyle.Simple() "simple"
(默认)
head_length=0.5, head_width=0.5,
tail_width=0.2
ArrowStyle.Fancy() "fancy" head_length=0.4, head_width=0.4,
tail_width=0.4
ArrowStyle.Wedge() "wedge" tail_width=0.3, shrink_factor=0.5

img_7.png img_8.png

"arc3, rad=1" == ConnectionStyle("arc3, rad=1") == ConnectionStyle("arc3", rad=1) == ConnectionStyle.Arc3(rad=1)

ConnectionStyle
ConnectionStyle子类 名称 属性
ConnectionStyle.Arc3() "arc3"
(默认)
rad=0.0
ConnectionStyle.Arc() "arc" angleA=0, angleB=0,
armA=None, armB=None,
rad=0.0
ConnectionStyle.Angle3() "angle3" angleA=90, angleB=0
ConnectionStyle.Angle() "angle" angleA=90, angleB=0,
rad=0.0
ConnectionStyle.Bar() "bar" armA=0.0, armB=0.0,
fraction=0.3, angle=None

img_9.png


FancyArrowPatch子类
fig = plt.figure(figsize=(8, 8), dpi=100, layout="constrained")
ax = fig.add_subplot(1, 1, 1)

patch = FancyArrowPatch(path=Path([(0.2, 0.2), (0.4, 0), (0.6, 0.4)], (1, 3, 2)),                # (1)!
                        arrowstyle="simple, head_length=20, head_width=20, tail_width=20",       # (2)!
                        connectionstyle="arc3, rad=0",                                           # (3)!
                        # mutation_scale=0.5,
                        # mutation_aspect=2,

                        # Patch父类参数
                        facecolor="red",
                        linestyle="--",
                        linewidth=2,
                        hatch="/",
                        hatch_linewidth=2,
                        edgecolor="green",
                        alpha=0.5
                        )
ax.add_patch(patch)
ax.grid()

plt.show()
  1. 路径
  2. 箭样式
  3. 连接线样式

img_10.png

FancyArrowPatch子类
fig = plt.figure(figsize=(8, 8), dpi=100, layout="constrained")
ax = fig.add_subplot(1, 1, 1)

patch = FancyArrowPatch(posA=(0.2, 0.2),                                                         # (1)!
                        posB=(0.4, 0.4),                                                         # (2)!
                        arrowstyle="simple, head_length=20, head_width=20, tail_width=20",       # (3)!
                        connectionstyle="arc3, rad=1",                                           # (4)!
                        # patchA=None,                                                           (5)
                        # patchB=None,                                                           (6)
                        shrinkA=20,                                                              # (7)!
                        shrinkB=20,                                                              # (8)!
                        # mutation_scale=0.5,
                        # mutation_aspect=2,

                        # Patch父类参数
                        facecolor="red",
                        linestyle="--",
                        linewidth=2,
                        hatch="/",
                        hatch_linewidth=2,
                        edgecolor="green",
                        alpha=0.5
                        )
ax.add_patch(patch)
ax.grid()

plt.show()
  1. 箭尾坐标
  2. 箭头坐标
  3. 箭样式
  4. 连接线样式
  5. 箭尾Patch
  6. 箭头Patch
  7. 箭尾缩短
  8. 箭头缩短

img_11.png

Comments