matplotlib.patches.ConnectionPatch#

class matplotlib.patches.ConnectionPatch(xyA, xyB, coordsA, coordsB=None, *, axesA=None, axesB=None, arrowstyle='-', connectionstyle='arc3', patchA=None, patchB=None, shrinkA=0.0, shrinkB=0.0, mutation_scale=10.0, mutation_aspect=None, clip_on=False, **kwargs)[source]#

Bases: FancyArrowPatch

A patch that connects two points (possibly in different Axes).

Connect point xyA in coordsA with point xyB in coordsB.

Valid keys are

Key

Description

arrowstyle

the arrow style

connectionstyle

the connection style

relpos

default is (0.5, 0.5)

patchA

default is bounding box of the text

patchB

default is None

shrinkA

default is 2 points

shrinkB

default is 2 points

mutation_scale

default is text size (in points)

mutation_aspect

default is 1.

?

any key for matplotlib.patches.PathPatch

coordsA and coordsB are strings that indicate the coordinates of xyA and xyB.

Property

Description

'figure points'

points from the lower left corner of the figure

'figure pixels'

pixels from the lower left corner of the figure

'figure fraction'

0, 0 is lower left of figure and 1, 1 is upper right

'subfigure points'

points from the lower left corner of the subfigure

'subfigure pixels'

pixels from the lower left corner of the subfigure

'subfigure fraction'

fraction of the subfigure, 0, 0 is lower left.

'axes points'

points from lower left corner of the Axes

'axes pixels'

pixels from lower left corner of the Axes

'axes fraction'

0, 0 is lower left of Axes and 1, 1 is upper right

'data'

use the coordinate system of the object being annotated (default)

'offset points'

offset (in points) from the xy value

'polar'

you can specify theta, r for the annotation, even in cartesian plots. Note that if you are using a polar Axes, you do not need to specify polar for the coordinate system since that is the native "data" coordinate system.

Alternatively they can be set to any valid Transform.

Note that 'subfigure pixels' and 'figure pixels' are the same for the parent figure, so users who want code that is usable in a subfigure can use 'subfigure pixels'.

Note

Using ConnectionPatch across two Axes instances is not directly compatible with constrained layout. Add the artist directly to the Figure instead of adding it to a specific Axes, or exclude it from the layout using con.set_in_layout(False).

fig, ax = plt.subplots(1, 2, constrained_layout=True)
con = ConnectionPatch(..., axesA=ax[0], axesB=ax[1])
fig.add_artist(con)
draw(renderer)[source]#

Draw the Artist (and its children) using the given renderer.

This has no effect if the artist is not visible (Artist.get_visible returns False).

Parameters:
rendererRendererBase subclass.

Notes

This method is overridden in the Artist subclasses.

get_annotation_clip()[source]#

Return the clipping behavior.

See set_annotation_clip for the meaning of the return value.

set(*, agg_filter=<UNSET>, alpha=<UNSET>, animated=<UNSET>, annotation_clip=<UNSET>, antialiased=<UNSET>, arrowstyle=<UNSET>, capstyle=<UNSET>, clip_box=<UNSET>, clip_on=<UNSET>, clip_path=<UNSET>, color=<UNSET>, connectionstyle=<UNSET>, edgecolor=<UNSET>, facecolor=<UNSET>, fill=<UNSET>, gid=<UNSET>, hatch=<UNSET>, hatch_linewidth=<UNSET>, in_layout=<UNSET>, joinstyle=<UNSET>, label=<UNSET>, linestyle=<UNSET>, linewidth=<UNSET>, mouseover=<UNSET>, mutation_aspect=<UNSET>, mutation_scale=<UNSET>, patchA=<UNSET>, patchB=<UNSET>, path_effects=<UNSET>, picker=<UNSET>, positions=<UNSET>, rasterized=<UNSET>, sketch_params=<UNSET>, snap=<UNSET>, transform=<UNSET>, url=<UNSET>, visible=<UNSET>, zorder=<UNSET>)[source]#

Set multiple properties at once.

Supported properties are

Property

Description

agg_filter

a filter function, which takes a (m, n, 3) float array and a dpi value, and returns a (m, n, 3) array and two offsets from the bottom left corner of the image

alpha

scalar or None

animated

bool

annotation_clip

bool or None

antialiased or aa

bool or None

arrowstyle

[ '-' | '<-' | '->' | '<->' | '<|-' | '-|>' | '<|-|>' | ']-' | '-[' | ']-[' | '|-|' | ']->' | '<-[' | 'simple' | 'fancy' | 'wedge' ]

capstyle

CapStyle or {'butt', 'projecting', 'round'}

clip_box

BboxBase or None

clip_on

bool

clip_path

Patch or (Path, Transform) or None

color

color

connectionstyle

[ 'arc3' | 'angle3' | 'angle' | 'arc' | 'bar' ]

edgecolor or ec

color or None

facecolor or fc

color or None

figure

Figure or SubFigure

fill

bool

gid

str

hatch

{'/', '\', '|', '-', '+', 'x', 'o', 'O', '.', '*'}

hatch_linewidth

unknown

in_layout

bool

joinstyle

JoinStyle or {'miter', 'round', 'bevel'}

label

object

linestyle or ls

{'-', '--', '-.', ':', '', (offset, on-off-seq), ...}

linewidth or lw

float or None

mouseover

bool

mutation_aspect

float

mutation_scale

float

patchA

patches.Patch

patchB

patches.Patch

path_effects

list of AbstractPathEffect

picker

None or bool or float or callable

positions

unknown

rasterized

bool

sketch_params

(scale: float, length: float, randomness: float)

snap

bool or None

transform

Transform

url

str

visible

bool

zorder

float

set_annotation_clip(b)[source]#

Set the annotation's clipping behavior.

Parameters:
bbool or None
  • True: The annotation will be clipped when self.xy is outside the Axes.

  • False: The annotation will always be drawn.

  • None: The annotation will be clipped when self.xy is outside the Axes and self.xycoords == "data".

Examples using matplotlib.patches.ConnectionPatch#

Bar of pie

Bar of pie

Multiple Axes animation

Multiple Axes animation

Constrained layout guide

Constrained layout guide

Annotations

Annotations