📌  相关文章
📜  Python中的 Matplotlib.artist.Artist.set_contains()

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

Python中的 Matplotlib.artist.Artist.set_contains()

Matplotlib是Python中的一个库,它是 NumPy 库的数值数学扩展。 Artist 类包含呈现为 FigureCanvas 的对象的 Abstract 基类。图中所有可见元素都是 Artist 的子类。

matplotlib.artist.Artist.set_contains() 方法

matplotlib 库的艺术家模块中的set_contains() 方法用于为艺术家定义自定义包含测试。

下面的示例说明了 matplotlib 中的 matplotlib.artist.Artist.set_contains()函数:

示例 1:

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

输出:

示例 2:

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

输出: