第七色在线视频,2021少妇久久久久久久久久,亚洲欧洲精品成人久久av18,亚洲国产精品特色大片观看完整版,孙宇晨将参加特朗普的晚宴

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

如何僅重畫某些 matplotlib 藝術(shù)家?

如何僅重畫某些 matplotlib 藝術(shù)家?

紫衣仙女 2023-07-27 16:27:03
我正在為電生理學(xué)數(shù)據(jù)開發(fā)一個自定義交互式圖形,將 10-400 條線(EEG 或 MEG 數(shù)據(jù)通道)繪制為帶有偏移的 LineCollection。使用垂直線來評估不同通道上的信號特征如何在時間上對齊通常很有用,因此我有一個button_press_event監(jiān)聽器來創(chuàng)建axvline(或更新該xdata線,如果它已經(jīng)存在)。axvline如果 LineCollection 中有很多通道,則重繪的成本很高,但據(jù)說更有效的重繪方法 ( ax.draw_artist(my_vline)) 根本不起作用(很可能我只是誤解了draw_artist應(yīng)該如何工作)。復(fù)制代碼import matplotlib.pyplot as pltplt.ion()def make_vline(event):    ax = event.inaxes    if getattr(ax, 'my_vline', None) is None:        ax.my_vline = ax.axvline(event.xdata, linewidth=4, color='r')    else:        ax.my_vline.set_xdata(event.xdata)    # I thought any 1 of these 3 lines would move the vline to the click location:    ax.draw_artist(ax.my_vline)  # this has no visible effect    ax.redraw_in_frame()  # TypeError (see below for traceback)    ax.figure.canvas.draw_idle()  # works, but slow when figure has many linesfig, ax = plt.subplots()callback_id = fig.canvas.mpl_connect('button_press_event', make_vline)實際結(jié)果如果我使用該ax.draw_artist(ax.my_vline)線,無論我單擊何處,結(jié)果都是空白軸(除非我隨后調(diào)整圖形大小,這會觸發(fā)重繪,然后出現(xiàn)該線)。如果我使用這ax.redraw_in_frame()條線,我會得到:Traceback (most recent call last):  File "/opt/miniconda3/envs/mnedev/lib/python3.8/site-packages/matplotlib/cbook/__init__.py", line 224, in process    func(*args, **kwargs)  File "<ipython-input-1-08572d18e6b3>", line 11, in make_vline    ax.redraw_in_frame()  File "/opt/miniconda3/envs/mnedev/lib/python3.8/site-packages/matplotlib/axes/_base.py", line 2778, in redraw_in_frame    stack.push(artist.set_visible, artist.get_visible())TypeError: push() takes 2 positional arguments but 3 were given如果我使用ax.figure.canvas.draw_idle()它,它會按預(yù)期工作,但是一旦圖形中有實際數(shù)據(jù),速度就會非常慢。這是一個較長的代碼片段,您可以在本地運行以查看緩慢情況:import numpy as npimport matplotlib.pyplot as pltfrom matplotlib.collections import LineCollectionplt.ion()rng = np.random.default_rng()問題什么時候ax.draw_artist(my_artist)真正起作用/它應(yīng)該做什么?我的示例是位塊傳輸有益的情況嗎?關(guān)于如何加快(重新)繪制速度還有其他想法嗎?Matplotlib 版本操作系統(tǒng):Xubuntu 20.04Matplotlib 版本:3.3.1(conda-forge)Matplotlib 后端:Qt5AggPython版本:3.8.5Jupyter 版本(如果適用):不適用其他庫:numpy 1.19.1(conda-forge)
查看完整描述

1 回答

?
MM們

TA貢獻1886條經(jīng)驗 獲得超2個贊

import numpy as np

import matplotlib.pyplot as plt

from matplotlib.collections import LineCollection

plt.ion()

rng = np.random.default_rng()



def make_vline(event):

? ? fig.canvas.restore_region(fig.my_bg)

? ? ax = event.inaxes

? ? if getattr(ax, 'my_vline', None) is None:

? ? ? ? ax.my_vline = ax.axvline(event.xdata, linewidth=4, color='r', zorder=3)

? ? else:

? ? ? ? ax.my_vline.set_xdata(event.xdata)

? ? ax.draw_artist(ax.my_vline)

? ? ax.figure.canvas.blit()

? ? ax.figure.canvas.flush_events()



def add_line_collection(ax):

? ? n_chans = 400

? ? n_times = 10001

? ? xs = np.linspace(0, 10, n_times)

? ? ys = rng.normal(size=(n_chans, n_times)) * 1e-6

? ? segments = [np.vstack((xs, ys[n])).T for n in range(n_chans)]

? ? yoffsets = np.arange(n_chans)

? ? offsets = np.vstack((np.zeros_like(yoffsets), yoffsets)).T

? ? lc = LineCollection(segments, offsets=offsets, linewidths=0.5, colors='k')

? ? ax.add_collection(lc)

? ? ax.set_xlim(xs[0], xs[-1])

? ? ax.set_ylim(yoffsets[0] - 0.5, yoffsets[-1] + 0.5)

? ? ax.set_yticks(yoffsets)



fig, ax = plt.subplots()

add_line_collection(ax)

callback_id = fig.canvas.mpl_connect('button_press_event', make_vline)

plt.pause(0.1)

fig.my_bg = fig.canvas.copy_from_bbox(fig.bbox)

請注意,如果調(diào)整圖形大小,這將不起作用,您需要copy_from_bbox在調(diào)整大小偵聽器中重新運行該行。


查看完整回答
反對 回復(fù) 2023-07-27
  • 1 回答
  • 0 關(guān)注
  • 164 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯(lián)系客服咨詢優(yōu)惠詳情

幫助反饋 APP下載

慕課網(wǎng)APP
您的移動學(xué)習(xí)伙伴

公眾號

掃描二維碼
關(guān)注慕課網(wǎng)微信公眾號