Movatterモバイル変換


[0]ホーム

URL:


Skip to content

Navigation Menu

Sign in
Appearance settings

Search code, repositories, users, issues, pull requests...

Provide feedback

We read every piece of feedback, and take your input very seriously.

Saved searches

Use saved searches to filter your results more quickly

Sign up
Appearance settings

Commit04e428f

Browse files
committed
breakup annotationbbox demo and add annotationbbox to annotation guide
1 parentc01eb01 commit04e428f

File tree

2 files changed

+119
-45
lines changed

2 files changed

+119
-45
lines changed
Lines changed: 75 additions & 44 deletions
Original file line numberDiff line numberDiff line change
@@ -1,12 +1,12 @@
11
"""
2-
===================
3-
AnnotationBbox demo
4-
===================
5-
6-
`.AnnotationBbox` creates an annotation using an `.OffsetBox`, and
7-
provides more fine-grained control than `.Axes.annotate`.Thisexample
8-
demonstrates the use of AnnotationBbox together with three different
9-
OffsetBoxes: `.TextArea`, `.DrawingArea`, and `.OffsetImage`.
2+
======================
3+
Artists as annotations
4+
======================
5+
6+
`.AnnotationBbox` creates an annotation using an `.OffsetBox` object, which is a class
7+
of container artists for positioning an artist relative to a parent artist.Thisallows
8+
for annotations that are texts, images, and arbitrary artists. `.AnnotationBbox` also
9+
provides more fine-grained control than `.Axes.annotate`.
1010
"""
1111

1212
importmatplotlib.pyplotasplt
@@ -15,8 +15,16 @@
1515
frommatplotlib.cbookimportget_sample_data
1616
frommatplotlib.offsetboximport (AnnotationBbox,DrawingArea,OffsetImage,
1717
TextArea)
18-
frommatplotlib.patchesimportCircle
18+
frommatplotlib.patchesimportAnnulus,Circle
1919

20+
# %%%%
21+
# Text
22+
# ====
23+
#
24+
# `.AnnotationBbox` supports positioning annotations relative to data, Artists, and
25+
# callables, as described in :ref:`annotations`. The `.TextArea` is used to create a
26+
# textbox that is not explicitly attached to an axes.
27+
#
2028
fig,ax=plt.subplots()
2129

2230
# Define a 1st position to annotate (display it with a marker)
@@ -26,46 +34,37 @@
2634
# Annotate the 1st position with a text box ('Test 1')
2735
offsetbox=TextArea("Test 1")
2836

29-
ab=AnnotationBbox(offsetbox,xy,
30-
xybox=(-20,40),
31-
xycoords='data',
32-
boxcoords="offset points",
33-
arrowprops=dict(arrowstyle="->"),
34-
bboxprops=dict(boxstyle="sawtooth"))
35-
ax.add_artist(ab)
37+
ab1=AnnotationBbox(offsetbox,xy,
38+
xybox=(-20,40),
39+
xycoords='data',
40+
boxcoords="offset points",
41+
arrowprops=dict(arrowstyle="->"),
42+
bboxprops=dict(boxstyle="sawtooth"))
43+
ax.add_artist(ab1)
3644

3745
# Annotate the 1st position with another text box ('Test')
38-
offsetbox=TextArea("Test")
39-
40-
ab=AnnotationBbox(offsetbox,xy,
41-
xybox=(1.02,xy[1]),
42-
xycoords='data',
43-
boxcoords=("axes fraction","data"),
44-
box_alignment=(0.,0.5),
45-
arrowprops=dict(arrowstyle="->"))
46-
ax.add_artist(ab)
46+
offsetbox=TextArea("Test 2")
4747

48-
# Define a 2nd position to annotate (don't display with a marker this time)
49-
xy= [0.3,0.55]
48+
ab2=AnnotationBbox(offsetbox, (1,.85),
49+
xybox=(.75,xy[1]),
50+
xycoords=ab1,
51+
boxcoords=("axes fraction","data"),
52+
box_alignment=(0.,0.5),
53+
arrowprops=dict(arrowstyle="->"))
54+
ax.add_artist(ab2)
5055

51-
#Annotate the 2nd position with a circle patch
52-
da=DrawingArea(20,20,0,0)
53-
p=Circle((10,10),10)
54-
da.add_artist(p)
56+
#%%%%
57+
# Images
58+
# ======
59+
# The `.OffsetImage` container supports plotting images using `.BboxImage`
5560

56-
ab=AnnotationBbox(da,xy,
57-
xybox=(1.,xy[1]),
58-
xycoords='data',
59-
boxcoords=("axes fraction","data"),
60-
box_alignment=(0.2,0.5),
61-
arrowprops=dict(arrowstyle="->"),
62-
bboxprops=dict(alpha=0.5))
63-
64-
ax.add_artist(ab)
61+
fig,ax=plt.subplots()
62+
# Define a position to annotate (don't display with a marker)
63+
xy= [0.3,0.55]
6564

66-
# Annotatethe 2ndposition with an image(agenerated array of pixels)
65+
# Annotateaposition with an image generatedfrom anarray of pixels
6766
arr=np.arange(100).reshape((10,10))
68-
im=OffsetImage(arr,zoom=2)
67+
im=OffsetImage(arr,zoom=2,cmap='viridis')
6968
im.image.axes=ax
7069

7170
ab=AnnotationBbox(im,xy,
@@ -74,10 +73,9 @@
7473
boxcoords="offset points",
7574
pad=0.3,
7675
arrowprops=dict(arrowstyle="->"))
77-
7876
ax.add_artist(ab)
7977

80-
# Annotate the2ndposition with another image (a Grace Hopper portrait)
78+
# Annotate the position with another image (a Grace Hopper portrait)
8179
withget_sample_data("grace_hopper.jpg")asfile:
8280
arr_img=plt.imread(file)
8381

@@ -102,6 +100,36 @@
102100

103101
plt.show()
104102

103+
# %%%%
104+
# Arbitrary Artists
105+
# ================
106+
# `.DrawingArea` artists position arbitrary artists relative to their parent artists.
107+
108+
fig,ax=plt.subplots()
109+
# Define a position to annotate (don't display with a marker)
110+
xy= [0.3,0.55]
111+
112+
# Annotate the position with a circle and annulus
113+
da=DrawingArea(30,30,0,0)
114+
p=Circle((10,10),10,color='C0')
115+
da.add_artist(p)
116+
q=Annulus((20,20),10,5,color='C1')
117+
da.add_artist(q)
118+
119+
120+
# Use the drawing area as an annotation
121+
ab=AnnotationBbox(da,xy,
122+
xybox=(.75,xy[1]),
123+
xycoords='data',
124+
boxcoords=("axes fraction","data"),
125+
box_alignment=(0.2,0.5),
126+
arrowprops=dict(arrowstyle="->"),
127+
bboxprops=dict(alpha=0.5))
128+
129+
ax.add_artist(ab)
130+
plt.show()
131+
#
132+
105133
# %%
106134
#
107135
# .. admonition:: References
@@ -117,3 +145,6 @@
117145
# - `matplotlib.cbook.get_sample_data`
118146
# - `matplotlib.pyplot.subplots`
119147
# - `matplotlib.pyplot.imread`
148+
#
149+
# .. tags::
150+
# component: annotation, styling: position

‎galleries/users_explain/text/annotations.py

Lines changed: 44 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -691,11 +691,54 @@ def __call__(self, x0, y0, width, height, mutation_size):
691691

692692
ax.add_artist(anchored_box)
693693
fig.subplots_adjust(top=0.8)
694-
695694
# %%
696695
# Note that, unlike in `.Legend`, the ``bbox_transform`` is set to
697696
# `.IdentityTransform` by default
698697
#
698+
# .. _annotations-bbox:
699+
#
700+
# Using an Artist as an annotation
701+
# ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
702+
# `.AnnotationBbox` uses `.OffsetBox` artists as the annotations and supports
703+
# positioning these annotations in the same was the other annotation methods.
704+
# For more examples, see
705+
# :doc:`/gallery/text_labels_and_annotations/demo_annotation_box`
706+
707+
frommatplotlib.offsetboximportAnnotationBbox,DrawingArea,OffsetImage
708+
frommatplotlib.patchesimportAnnulus
709+
710+
fig,ax=plt.subplots()
711+
712+
text=ax.text(.2,.8,"Green!",color='green')
713+
714+
da=DrawingArea(20,20,0,0)
715+
annulus=Annulus((10,10),10,5,color='tab:green')
716+
da.add_artist(annulus)
717+
718+
# position annulus relative to text
719+
ab1=AnnotationBbox(da, (.5,0),
720+
xybox=(.5,.25),
721+
xycoords=text,
722+
boxcoords=(text,"data"),
723+
arrowprops=dict(arrowstyle="->"),
724+
bboxprops=dict(alpha=0.5))
725+
ax.add_artist(ab1)
726+
727+
N=25
728+
arr=np.repeat(np.linspace(0,10,N),N).reshape(N,N)
729+
im=OffsetImage(arr,cmap='Greens')
730+
im.image.axes=ax
731+
732+
# position gradient relative to text and annulus
733+
ab2=AnnotationBbox(im,xy=(.5,0),
734+
xybox=(.75,0),
735+
xycoords=text,
736+
boxcoords=('data',annulus),
737+
arrowprops=dict(arrowstyle="->"),
738+
bboxprops=dict(alpha=0.5))
739+
ax.add_artist(ab2)
740+
741+
# %%%%
699742
# .. _annotating_coordinate_systems:
700743
#
701744
# Coordinate systems for annotations

0 commit comments

Comments
 (0)

[8]ページ先頭

©2009-2025 Movatter.jp