Skip to content
Related Articles

Related Articles

Improve Article

Matplotlib.text.OffsetFrom class in python

  • Last Updated : 21 Apr, 2020

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.

 Attention geek! Strengthen your foundations with the Python Programming Foundation Course and learn the basics.  

To begin with, your interview preparations Enhance your Data Structures concepts with the Python DS Course. And to begin with your Machine Learning Journey, join the Machine Learning - Basic Level Course

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:




My Personal Notes arrow_drop_up
Recommended Articles
Page :