中文字幕av专区_日韩电影在线播放_精品国产精品久久一区免费式_av在线免费观看网站

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

利用matplotlib怎么繪制一個多子圖共享鼠標光標

發布時間:2021-01-11 15:11:30 來源:億速云 閱讀:209 作者:Leah 欄目:開發技術

這篇文章給大家介紹利用matplotlib怎么繪制一個多子圖共享鼠標光標,內容非常詳細,感興趣的小伙伴們可以參考借鑒,希望對大家能有所幫助。

matplotlib官方除了提供了鼠標十字光標的示例,還提供了同一圖像內多子圖共享光標的示例,其功能主要由widgets模塊中的MultiCursor類提供支持。

MultiCursor類與Cursor類參數類似,差異主要在:

  • Cursor類參數只有一個ax,即需要顯示光標的子圖;MultiCursor類參數為canvasaxes,其中axes為需要共享光標的子圖列表。

  • Cursor類中,光標默認是十字線;MultiCursor類中,光標默認為豎線。

官方示例

import numpy as np
import matplotlib.pyplot as plt
from matplotlib.widgets import MultiCursor

t = np.arange(0.0, 2.0, 0.01)
s1 = np.sin(2*np.pi*t)
s2 = np.sin(4*np.pi*t)

fig, (ax1, ax2) = plt.subplots(2, sharex=True)
ax1.plot(t, s1)
ax2.plot(t, s2)

multi = MultiCursor(fig.canvas, (ax1, ax2), color='r', lw=1)
plt.show()

利用matplotlib怎么繪制一個多子圖共享鼠標光標

簡易修改版

multi = MultiCursor(fig.canvas, (ax1, ax2), color='r', lw=1, horizOn=True, vertOn=True)

利用matplotlib怎么繪制一個多子圖共享鼠標光標

MultiCursor類源碼

class MultiCursor(Widget):
  """
  Provide a vertical (default) and/or horizontal line cursor shared between
  multiple axes.

  For the cursor to remain responsive you must keep a reference to it.

  Example usage::

    from matplotlib.widgets import MultiCursor
    import matplotlib.pyplot as plt
    import numpy as np

    fig, (ax1, ax2) = plt.subplots(nrows=2, sharex=True)
    t = np.arange(0.0, 2.0, 0.01)
    ax1.plot(t, np.sin(2*np.pi*t))
    ax2.plot(t, np.sin(4*np.pi*t))

    multi = MultiCursor(fig.canvas, (ax1, ax2), color='r', lw=1,
              horizOn=False, vertOn=True)
    plt.show()

  """
  def __init__(self, canvas, axes, useblit=True, horizOn=False, vertOn=True,
         **lineprops):

    self.canvas = canvas
    self.axes = axes
    self.horizOn = horizOn
    self.vertOn = vertOn

    xmin, xmax = axes[-1].get_xlim()
    ymin, ymax = axes[-1].get_ylim()
    xmid = 0.5 * (xmin + xmax)
    ymid = 0.5 * (ymin + ymax)

    self.visible = True
    self.useblit = useblit and self.canvas.supports_blit
    self.background = None
    self.needclear = False

    if self.useblit:
      lineprops['animated'] = True

    if vertOn:
      self.vlines = [ax.axvline(xmid, visible=False, **lineprops)
              for ax in axes]
    else:
      self.vlines = []

    if horizOn:
      self.hlines = [ax.axhline(ymid, visible=False, **lineprops)
              for ax in axes]
    else:
      self.hlines = []

    self.connect()
    
  def connect(self):
    """Connect events."""
    self._cidmotion = self.canvas.mpl_connect('motion_notify_event',
                         self.onmove)
    self._ciddraw = self.canvas.mpl_connect('draw_event', self.clear)

  def disconnect(self):
    """Disconnect events."""
    self.canvas.mpl_disconnect(self._cidmotion)
    self.canvas.mpl_disconnect(self._ciddraw)

  def clear(self, event):
    """Clear the cursor."""
    if self.ignore(event):
      return
    if self.useblit:
      self.background = (
        self.canvas.copy_from_bbox(self.canvas.figure.bbox))
    for line in self.vlines + self.hlines:
      line.set_visible(False)

  def onmove(self, event):
    if self.ignore(event):
      return
    if event.inaxes is None:
      return
    if not self.canvas.widgetlock.available(self):
      return
    self.needclear = True
    if not self.visible:
      return
    if self.vertOn:
      for line in self.vlines:
        line.set_xdata((event.xdata, event.xdata))
        line.set_visible(self.visible)
    if self.horizOn:
      for line in self.hlines:
        line.set_ydata((event.ydata, event.ydata))
        line.set_visible(self.visible)
    self._update()


  def _update(self):
    if self.useblit:
      if self.background is not None:
        self.canvas.restore_region(self.background)
      if self.vertOn:
        for ax, line in zip(self.axes, self.vlines):
          ax.draw_artist(line)
      if self.horizOn:
        for ax, line in zip(self.axes, self.hlines):
          ax.draw_artist(line)
      self.canvas.blit()
    else:
      self.canvas.draw_idle()

關于利用matplotlib怎么繪制一個多子圖共享鼠標光標就分享到這里了,希望以上內容可以對大家有一定的幫助,可以學到更多知識。如果覺得文章不錯,可以把它分享出去讓更多的人看到。

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

黔西| 鹿邑县| 绥滨县| 仁布县| 荔浦县| 延津县| 湘阴县| 卓资县| 金沙县| 永宁县| 陈巴尔虎旗| 晋中市| 肇州县| 宁津县| 北海市| 宜黄县| 屯昌县| 珲春市| 永顺县| 诸城市| 盐源县| 连州市| 益阳市| 惠来县| 盐津县| 洛宁县| 福清市| 克什克腾旗| 年辖:市辖区| 彩票| 马龙县| 涡阳县| 化德县| 安岳县| 高陵县| 中牟县| 江城| 无锡市| 怀仁县| 苍溪县| 凉城县|