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

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

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

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

Matplotlib.axis.Axis.set_contains()函数

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

以下示例说明了 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() 

输出: