📌  相关文章
📜  Python中的 Matplotlib.axis.Tick.set_contains()函数

📅  最后修改于: 2022-05-13 01:54:41.511000             🧑  作者: Mango

Python中的 Matplotlib.axis.Tick.set_contains()函数

Matplotlib是Python中的一个库,它是 NumPy 库的数值数学扩展。它是Python中用于二维数组图的惊人可视化库,用于处理更广泛的 SciPy 堆栈。

matplotlib.axis.Tick.set_contains()函数

matplotlib 库的轴模块中的Tick.set_contains()函数用于为艺术家定义自定义包含测试。

下面的示例说明了 matplotlib.axis 中的 matplotlib.axis.Tick.set_contains()函数:
示例 1:

Python3
# Implementation of matplotlib function
from matplotlib.axis import Tick
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())  
      
Tick.set_contains(ax2, picker = onpick1) 
fig.canvas.mpl_connect('pick_event', onpick1)
  
fig.suptitle('matplotlib.axis.Tick.set_contains() \
function Example', fontweight ="bold")  
     
plt.show()


Python3
# Implementation of matplotlib function
from matplotlib.axis import Tick
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')  
     
Tick.set_contains(ax, picker = line_picker) 
     
fig.canvas.mpl_connect('pick_event', onpick2) 
  
fig.suptitle('matplotlib.axis.Tick.set_contains() \
function Example', 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 Tick
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')  
     
Tick.set_contains(ax, picker = line_picker) 
     
fig.canvas.mpl_connect('pick_event', onpick2) 
  
fig.suptitle('matplotlib.axis.Tick.set_contains() \
function Example', fontweight ="bold")  
     
plt.show() 

输出: