Python中的 Matplotlib.axis.Axis.set_contains()函数
Matplotlib是Python中的一个库,它是 NumPy 库的数值数学扩展。它是Python中用于二维数组图的惊人可视化库,用于处理更广泛的 SciPy 堆栈。
Matplotlib.axis.Axis.set_contains()函数
matplotlib 库的轴模块中的Axis.set_contains()函数用于为艺术家定义自定义包含测试。
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.
以下示例说明了 matplotlib.axis 中的 matplotlib.axis.Axis.set_contains()函数:
示例 1:
Python3
# 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()
Python3
# 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()
输出:
点击图:
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))
示例 2:
Python3
# 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()
输出: