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

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

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

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

matplotlib.artist.Artist.get_contains() 方法

matplotlib 库的艺术家模块中的get_contains() 方法用于返回艺术家的自定义包含函数。

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

示例 1:

# Implementation of matplotlib function
from matplotlib.artist import Artist
import matplotlib.pyplot as plt 
from matplotlib.lines import Line2D 
import numpy as np 
from numpy.random import rand 
  
  
fig, ax2 = plt.subplots() 
      
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)
  
ax2.text(0.5, 0.8, 
         "Value Return : "
         + str(Artist.get_contains(ax2)),  
         fontweight ="bold", fontsize = 10) 
          
fig.suptitle('matplotlib.artist.Artist.get_contains() \
function Example', fontweight ="bold") 
  
plt.show()

输出:

示例 2:

# Implementation of matplotlib function
from matplotlib.artist import Artist
# Implementation of matplotlib function 
import matplotlib.pyplot as plt 
from matplotlib.lines import Line2D 
import numpy as np 
from numpy.random import rand 
  
      
fig, ax = plt.subplots() 
ax.plot(rand(100), rand(100), 'o') 
      
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() 
   
Artist.set_contains(ax, picker = line_picker)
  
ax.text(0.1, 0.8, 
         "Value Return : "
         + str(Artist.get_contains(ax)),  
         fontweight ="bold", fontsize = 10) 
          
fig.suptitle('matplotlib.artist.Artist.get_contains() \
function Example', fontweight ="bold") 
  
plt.show()

输出: