Open In App

Matplotlib.text.OffsetFrom class in python

Improve
Improve
Like Article
Like
Save
Share
Report

Matplotlib is an amazing visualization library in Python for 2D plots of arrays. Matplotlib is a multi-platform data visualization library built on NumPy arrays and designed to work with the broader SciPy stack.

matplotlib.text.OffsetFrom

The matplotlib.text.OffsetFrom class is a callable helper class for working with Annotation.

Syntax: class matplotlib.text.OffsetFrom(artist, ref_coord, unit=’points’)

Parameter:

  1. artist: This object is used to compute the offset. It is generally an Artist, a BboxBase or Transform.
  2. ref_coord: It is length 2 sequence. This values is the location to of the offset origin in fractions of the artist bounding box if it is an Artist or BboxBase whereas it is the offset origin is the transform applied to this value if artist is a Transform.
  3. unit : It is used to manage the screen units to use (pixels or points) for the offset input.

Methods of the class:

  • get_unit(self) : It is the unit for input to the transform used by __call__.
  • set_unit(self, unit): It is the unit for input to the transform used by __call__ where, unit argument is in ‘points’ or ‘pixels’.

Example 1:




import matplotlib.pyplot as plt
import matplotlib.text
   
fig, ax = plt.subplots()
   
ax.plot([5,1], label="Label 1")
ax.plot([3,0], label="Label 2")
   
legend = ax.legend(loc="upper right")
   
# Create offset from lower right
# corner of legend box, (1.0,0) is
# the coordinates of the offset point
# in the legend coordinate system
offset = matplotlib.text.OffsetFrom(legend, (1.0, 0.0))
  
# Create annotation. Top right corner 
# located -20 pixels below the offset
# point (lower right corner of legend).
ax.annotate("info_string",
            xy = (0,0), 
            size = 14,
            xycoords = 'figure fraction',
            xytext = (0,-20), 
            textcoords = offset, 
            horizontalalignment = 'right'
            verticalalignment = 'top')
  
# Draw the canvas for offset to take effect
fig.canvas.draw()
   
plt.show()


Output:

Example 2:




import matplotlib.pyplot as plt
from matplotlib.patches import Ellipse
import numpy as np
from matplotlib.text import OffsetFrom
  
  
  
fig, (ax1, ax2) = plt.subplots(1, 2)
  
bbox_args = dict(boxstyle ="round", fc ="0.8")
arrow_args = dict(arrowstyle ="->")
  
# Here we'll demonstrate the extents of the coordinate system and how
# we place annotating text.
  
ax1.annotate('figure fraction : 0, 0'
             xy =(0, 0),
             xycoords ='figure fraction',
             xytext =(20, 20),
             textcoords ='offset points',
             ha = "left",
             va = "bottom",
             bbox = bbox_args,
             arrowprops = arrow_args)
  
ax1.annotate('figure fraction : 1, 1',
             xy =(1, 1),
             xycoords ='figure fraction',
             xytext = (-20, -20),
             textcoords ='offset points',
             ha = "right",
             va = "top",
             bbox = bbox_args,
             arrowprops = arrow_args)
  
ax1.annotate('axes fraction : 0, 0',
             xy = (0, 0),
             xycoords ='axes fraction',
             xytext = (20, 20),
             textcoords ='offset points',
             ha = "left",
             va = "bottom",
             bbox = bbox_args,
             arrowprops = arrow_args)
  
ax1.annotate('axes fraction : 1, 1'
             xy =(1, 1),
             xycoords ='axes fraction',
             xytext = (-20, -20),
             textcoords ='offset points',
             ha = "right",
             va = "top",
             bbox = bbox_args,
             arrowprops = arrow_args)
  
# It is also possible to generate
# draggable annotations
an1 = ax1.annotate('Drag me 1', xy =(.5, .7), 
                   xycoords ='data',
                   ha ="center", va ="center",
                   bbox = bbox_args,
                   )
  
an2 = ax1.annotate('Drag me 2', xy =(.5, .5), 
                   xycoords = an1,
                   xytext =(.5, .3),
                   textcoords = 'axes fraction',
                   ha = "center"
                   va = "center",
                   bbox = bbox_args,
                   arrowprops = dict(patchB = an1.get_bbox_patch(),
                                   connectionstyle = "arc3, rad = 0.2",
                                   **arrow_args))
an1.draggable()
an2.draggable()
  
an3 = ax1.annotate('', xy =(.5, .5), xycoords = an2,
                   xytext =(.5, .5), textcoords = an1,
                   ha ="center", va ="center",
                   bbox = bbox_args,
                   arrowprops = dict(patchA = an1.get_bbox_patch(),
                                   patchB = an2.get_bbox_patch(),
                                   connectionstyle ="arc3, rad = 0.2",
                                   **arrow_args))
  
# Finally we'll show off some more 
# complex annotation and placement
text = ax2.annotate('xy =(0, 1)\nxycoords = ("data", "axes fraction")',
                    xy =(0, 1),
                    xycoords = ("data", 'axes fraction'),
                    xytext = (0, -20),
                    textcoords ='offset points',
                    ha = "center",
                    va = "top",
                    bbox = bbox_args,
                    arrowprops = arrow_args)
  
ax2.annotate('xy =(0.5, 0)\nxycoords = artist',
             xy =(0.5, 0.),
             xycoords = text,
             xytext = (0, -20), 
             textcoords = 'offset points',
             ha = "center"
             va = "top",
             bbox = bbox_args,
             arrowprops = arrow_args)
  
ax2.annotate('xy =(0.8, 0.5)\nxycoords = ax1.transData',
             xy =(0.8, 0.5), 
             xycoords = ax1.transData,
             xytext = (10, 10),
             textcoords = OffsetFrom(ax2.bbox, (0, 0), "points"),
             ha = "left"
             va = "bottom",
             bbox = bbox_args,
             arrowprops = arrow_args)
  
ax2.set(xlim =[-2, 2], ylim =[-2, 2])
plt.show()


Output:



Last Updated : 21 Apr, 2020
Like Article
Save Article
Previous
Next
Share your thoughts in the comments
Similar Reads