Matplotlib is a library in Python and it is numerical – mathematical extension for NumPy library. It is an amazing visualization library in Python for 2D plots of arrays and used for working with the broader SciPy stack.
Matplotlib.axis.Axis.set_contains() Function
The Axis.set_contains() function in axis module of matplotlib library is used to define a custom contains test for the artist.
Syntax: Axis.set_contains(self, picker)
Parameters: This method accepts the following parameters.
- picker: This parameter is the custom picker function to evaluate if an event is within the artist.
Return value: This method does not return any value.
Below examples illustrate the matplotlib.axis.Axis.set_contains() function in matplotlib.axis:
Example 1:
# Implementation of matplotlib function from matplotlib.axis import Axis
import matplotlib.pyplot as plt
from matplotlib.lines import Line2D
from matplotlib.patches import Rectangle
from matplotlib.text import Text
from matplotlib.image import AxesImage
import numpy as np
from numpy.random import rand
fig, (ax1, ax2) = plt.subplots( 2 , 1 )
ax1.set_ylabel( 'ylabel' , picker = True ,
bbox = dict (facecolor = 'red' ))
line, = ax1.plot(rand( 100 ), 'go-' )
ax2.bar( range ( 10 ), rand( 10 ), picker = True )
for label in ax2.get_xticklabels():
label.set_picker( True )
def onpick1(event):
if isinstance (event.artist, Line2D):
thisline = event.artist
xdata = thisline.get_xdata()
ydata = thisline.get_ydata()
ind = event.ind
print ( 'onpick1 line:' , np.column_stack([xdata[ind],
ydata[ind]]))
elif isinstance (event.artist, Rectangle):
patch = event.artist
print ( 'onpick1 patch:' , patch.get_path())
elif isinstance (event.artist, Text):
text = event.artist
print ( 'onpick1 text:' , text.get_text())
Axis.set_contains(ax2, picker = onpick1)
fig.canvas.mpl_connect( 'pick_event' , onpick1)
fig.suptitle('matplotlib.axis.Axis.set_contains() \ function Example\n', fontweight = "bold" )
plt.show() |
Output:
Onclick on Figure:
onpick1 text: ylabel onpick1 patch: Path(array([[0., 0.], [1., 0.], [1., 1.], [0., 1.], [0., 0.]]), array([ 1, 2, 2, 2, 79], dtype=uint8)) onpick1 patch: Path(array([[0., 0.], [1., 0.], [1., 1.], [0., 1.], [0., 0.]]), array([ 1, 2, 2, 2, 79], dtype=uint8))
Example 2:
# Implementation of matplotlib function from matplotlib.axis import Axis
import matplotlib.pyplot as plt
from matplotlib.lines import Line2D
from matplotlib.patches import Rectangle
from matplotlib.text import Text
from matplotlib.image import AxesImage
import numpy as np
from numpy.random import rand
def line_picker(line, mouseevent):
if mouseevent.xdata is None :
return False , dict ()
xdata = line.get_xdata()
ydata = line.get_ydata()
maxd = 0.05
d = np.sqrt(
(xdata - mouseevent.xdata) * * 2 + (ydata - mouseevent.ydata) * * 2 )
ind, = np.nonzero(d < = maxd)
if len (ind):
pickx = xdata[ind]
picky = ydata[ind]
props = dict (ind = ind, pickx = pickx, picky = picky)
return True , props
else :
return False , dict ()
def onpick2(event):
print ( 'Result :' , event.pickx, event.picky)
fig, ax = plt.subplots()
ax.plot(rand( 100 ), rand( 100 ), 'o' )
Axis.set_contains(ax, picker = line_picker)
fig.canvas.mpl_connect( 'pick_event' , onpick2)
fig.suptitle('matplotlib.axis.Axis.set_contains() \ function Example\n', fontweight = "bold" )
plt.show() |
Output: