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

Appearance settings

Commit 9f0e5a7

Browse filesBrowse files
committed
DOC: add infor to transforms tutorial about fig.dpi_scale_trans
1 parent 4d1ca36 commit 9f0e5a7
Copy full SHA for 9f0e5a7

File tree

Expand file treeCollapse file tree

1 file changed

+78
-36
lines changed
Filter options
Expand file treeCollapse file tree

1 file changed

+78
-36
lines changed

‎tutorials/advanced/transforms_tutorial.py

Copy file name to clipboardExpand all lines: tutorials/advanced/transforms_tutorial.py
+78-36Lines changed: 78 additions & 36 deletions
Original file line numberDiff line numberDiff line change
@@ -18,38 +18,45 @@
1818
``ax`` is a :class:`~matplotlib.axes.Axes` instance, and ``fig`` is a
1919
:class:`~matplotlib.figure.Figure` instance.
2020
21-
+-----------+-----------------------------+-----------------------------------+
22-
|Coordinates|Transformation object |Description |
23-
+-----------+-----------------------------+-----------------------------------+
24-
|"data" |``ax.transData`` |The coordinate system for the data,|
25-
| | |controlled by xlim and ylim. |
26-
+-----------+-----------------------------+-----------------------------------+
27-
|"axes" |``ax.transAxes`` |The coordinate system of the |
28-
| | |`~matplotlib.axes.Axes`; (0, 0) |
29-
| | |is bottom left of the axes, and |
30-
| | |(1, 1) is top right of the axes. |
31-
+-----------+-----------------------------+-----------------------------------+
32-
|"figure" |``fig.transFigure`` |The coordinate system of the |
33-
| | |`.Figure`; (0, 0) is bottom left |
34-
| | |of the figure, and (1, 1) is top |
35-
| | |right of the figure. |
36-
+-----------+-----------------------------+-----------------------------------+
37-
|"display" |``None``, or |The pixel coordinate system of the |
38-
| |``IdentityTransform()`` |display; (0, 0) is bottom left of |
39-
| | |the display, and (width, height) is|
40-
| | |top right of the display in pixels.|
41-
+-----------+-----------------------------+-----------------------------------+
42-
|"xaxis", |``ax.get_xaxis_transform()``,|Blended coordinate systems; use |
43-
|"yaxis" |``ax.get_yaxis_transform()`` |data coordinates on one of the axis|
44-
| | |and axes coordinates on the other. |
45-
+-----------+-----------------------------+-----------------------------------+
21+
+----------------+-----------------------------+-----------------------------------+
22+
|Coordinates |Transformation object |Description |
23+
+----------------+-----------------------------+-----------------------------------+
24+
|"data" |``ax.transData`` |The coordinate system for the data,|
25+
| | |controlled by xlim and ylim. |
26+
+----------------+-----------------------------+-----------------------------------+
27+
|"axes" |``ax.transAxes`` |The coordinate system of the |
28+
| | |`~matplotlib.axes.Axes`; (0, 0) |
29+
| | |is bottom left of the axes, and |
30+
| | |(1, 1) is top right of the axes. |
31+
+----------------+-----------------------------+-----------------------------------+
32+
|"figure" |``fig.transFigure`` |The coordinate system of the |
33+
| | |`.Figure`; (0, 0) is bottom left |
34+
| | |of the figure, and (1, 1) is top |
35+
| | |right of the figure. |
36+
+----------------+-----------------------------+-----------------------------------+
37+
|"figure-inches" |``fig.dpi_scale_trans`` |The coordinate system of the |
38+
| | |`.Figure` in inches; (0, 0) is |
39+
| | |bottom left of the figure, and |
40+
| | |(width, height) is the top right |
41+
| | |of the figure ininches. |
42+
+----------------+-----------------------------+-----------------------------------+
43+
|"display" |``None``, or |The pixel coordinate system of the |
44+
| |``IdentityTransform()`` |display window; (0, 0) is bottom |
45+
| | |left of the window, and (width, |
46+
| | |height) is top right of the |
47+
| | |display window in pixels. |
48+
+----------------+-----------------------------+-----------------------------------+
49+
|"xaxis", |``ax.get_xaxis_transform()``,|Blended coordinate systems; use |
50+
|"yaxis" |``ax.get_yaxis_transform()`` |data coordinates on one of the axis|
51+
| | |and axes coordinates on the other. |
52+
+----------------+-----------------------------+-----------------------------------+
4653
4754
All of the transformation objects in the table above take inputs in
48-
their coordinate system, and transform the input to the `display`
49-
coordinate system. That is why the `display` coordinate system has
50-
`None` for the `Transformation Object` column -- it already is in
55+
their coordinate system, and transform the input to the ``display``
56+
coordinate system. That is why the ``display`` coordinate system has
57+
``None`` for the ``Transformation Object`` column -- it already is in
5158
display coordinates. The transformations also know how to invert
52-
themselves, to go from `display` back to the native coordinate system.
59+
themselves, to go from ``display`` back to the native coordinate system.
5360
This is particularly useful when processing events from the user
5461
interface, which typically occur in display space, and you want to
5562
know where the mouse click or key-press occurred in your data
@@ -71,6 +78,7 @@
7178

7279
import numpy as np
7380
import matplotlib.pyplot as plt
81+
import matplotlib.patches as mpatches
7482

7583
x = np.arange(0, 10, 0.005)
7684
y = np.exp(-x/2.) * np.sin(2*np.pi*x)
@@ -229,14 +237,12 @@
229237
# move, but the circle will remain fixed because it is not in `data`
230238
# coordinates and will always remain at the center of the axes.
231239

232-
import matplotlib.patches as patches
233-
234240
fig = plt.figure()
235241
ax = fig.add_subplot(111)
236242
x, y = 10*np.random.rand(2, 1000)
237243
ax.plot(x, y, 'go') # plot some data in data coordinates
238244

239-
circ = patches.Circle((0.5, 0.5), 0.25, transform=ax.transAxes,
245+
circ = mpatches.Circle((0.5, 0.5), 0.25, transform=ax.transAxes,
240246
facecolor='yellow', alpha=0.5)
241247
ax.add_patch(circ)
242248
plt.show()
@@ -281,7 +287,7 @@
281287
# highlight the 1..2 stddev region with a span.
282288
# We want x to be in data coordinates and y to
283289
# span from 0..1 in axes coords
284-
rect = patches.Rectangle((1, 0), width=1, height=1,
290+
rect = mpatches.Rectangle((1, 0), width=1, height=1,
285291
transform=trans, color='yellow',
286292
alpha=0.5)
287293

@@ -303,6 +309,41 @@
303309
#
304310
# trans = ax.get_xaxis_transform()
305311
#
312+
# .. _transforms-fig-scale-dpi:
313+
#
314+
# Plotting in physical units
315+
# ==========================
316+
#
317+
# Sometimes we want an object to be a certain physical size on the plot, in
318+
# which case the ``fig.dpi_scale_trans`` should be used. The following
319+
# example draws a circle displaced one inch from the bottom-left corner that
320+
# is 0.5-inches in diameter. Note that if you run this code with an
321+
# interactive window and resize, the circle stays in the same spot.
322+
323+
fig, ax = plt.subplots(figsize=(3, 3))
324+
r = mpatches.Circle((1, 1), 1., transform=fig.dpi_scale_trans)
325+
fig.artists.append(r)
326+
plt.show()
327+
328+
###############################################################################
329+
# Another use is putting a circle around a data point that is a certain size.
330+
# Though in this case if the figure is resized the circle doesn't follow the
331+
# data point. This is a good example of using ``inverted``:
332+
fig, ax = plt.subplots()
333+
xdata, ydata = (0.2, 0.7), (0.5, 0.5)
334+
ax.plot(xdata, ydata, "o")
335+
ax.set_xlim((0, 1))
336+
# get the coordinates of the data point in inches from lower left corner:
337+
x, y = fig.dpi_scale_trans.inverted().transform(
338+
ax.transData.transform((xdata[0], ydata[0])))
339+
# plot a circle around the point that is 50 points in diameter...
340+
circle = mpatches.Circle((x, y), 50/72, fill=None,
341+
transform=fig.dpi_scale_trans)
342+
# add to figure
343+
fig.artists.append(circle)
344+
plt.show()
345+
346+
###############################################################################
306347
# .. _offset-transforms-shadow:
307348
#
308349
# Using offset transforms to create a shadow effect
@@ -327,7 +368,9 @@
327368
#
328369
# where `xt` and `yt` are the translation offsets, and `scale_trans` is
329370
# a transformation which scales `xt` and `yt` at transformation time
330-
# before applying the offsets. A typical use case is to use the figure
371+
# before applying the offsets.
372+
#
373+
# A typical use case is to use the figure
331374
# ``fig.dpi_scale_trans`` transformation for the `scale_trans` argument,
332375
# to first scale `xt` and `yt` specified in points to `display` space
333376
# before doing the final offset. The dpi and inches offset is a
@@ -348,8 +391,7 @@
348391
# 1/72 inches, and by specifying your offsets in points, your figure
349392
# will look the same regardless of the dpi resolution it is saved in.
350393

351-
fig = plt.figure()
352-
ax = fig.add_subplot(111)
394+
fig, ax = plt.subplots()
353395

354396
# make a simple sine wave
355397
x = np.arange(0., 2., 0.01)

0 commit comments

Comments
0 (0)
Morty Proxy This is a proxified and sanitized view of the page, visit original site.