簡體   English   中英

python matplotlib blit到圖的軸或側面?

[英]python matplotlib blit to axes or sides of the figure?

每次我通過一個適合的程序,我試圖刷新我在gui中的一些情節。 此外,這些圖是在可以調整大小的framw內,因此在調整大小后需要重新繪制軸和標簽等。 因此想知道是否有人知道如何使用plot.figure.canvas.copy_from_bboxblit等更新圖形的邊。 這似乎只復制和blit圖形區域的背景(繪制線條的位置),而不是圖形或圖形的邊(標簽和刻度線的位置)。 我一直試圖讓我的圖表通過反復試驗和閱讀mpl文檔來更新,但到目前為止,我的代碼已經變得非常復雜,像self.this_plot.canvas_of_plot..etc.etc.. .plot.figure.canvas.copy_from_bbox ...這可能太復雜了。 我知道我的語言可能有些偏差,但我一直在嘗試閱讀matplotlb文檔,圖,畫布,圖形,情節,圖形等之間的差異開始躲避我。 所以我的首要問題是:

1 - 如何更新matplotlib圖周圍的刻度和標簽。

其次,既然我想更好地掌握這個問題的答案,

2 - 關於它們在GUI中覆蓋的區域,繪圖,圖形,畫布等之間有什么區別。

非常感謝你的幫助。

所有這些一開始肯定會讓人感到困惑!

首先,如果你正在鏈接蜱等,那么使用blitting沒什么意義。 如果只是某些事情發生變化,Blitting只是避免重新繪制所有內容的一種方法。 如果一切都在變化,那么使用blitting是沒有意義的。 重新繪制情節。

基本上,你只需要fig.canvas.draw()plt.draw()

無論如何,要回答您的第一個問題,在大多數情況下您不需要手動更新它們。 如果更改軸限制,它們將自行更新。 你遇到了問題,因為你只是在軸內部進行blitting,而不是重繪繪圖。

至於你的第二個問題,一個好的,詳細的概述是Matplotlib用戶指南Artist Tutorial

簡而言之,有兩個獨立的層。 一個是處理將事物分組到繪圖時要擔心的部分(例如圖形,軸,軸,線等),另一個處理渲染和繪圖(畫布和渲染器)。

你可以在matplotlib圖中看到的任何東西都是Artist (例如文本,線條,軸,甚至圖形本身。)藝術家a)知道如何繪制自己,b)可以包含其他藝術家。

對於一個藝術家來繪制自己,它使用渲染器(一個你幾乎從不直接觸摸的后端特定模塊)來繪制一個FigureCanvas aka“canvas”(圍繞基於矢量的頁面或像素緩沖區的抽象) 。 要繪制圖中的所有內容,請調用canvas.draw()

因為藝術家可以是其他藝術家的群體,所以事物的層次結構。 基本上,這樣的事情(顯然,這會有所不同):

Figure
    Axes (0-many) (An axes is basically a plot)
        Axis (usually two) (x-axis and y-axis)
            ticks
            ticklabels
            axis label
         background patch
         title, if present
         anything you've plotted, e.g. Line2D's

無論如何,希望這會讓事情變得更加清晰。

如果你真的想使用blitting來更新刻度標簽等,你需要抓住並恢復包括它們在內的整個區域。 這個區域有點棘手,因為直到繪制時間之后才知道它(在matplotlib中渲染文本比由於乳膠支持而渲染其他東西更復雜)。 你可以做到這一點,如果它真的是你想要的話,我會很高興給出一個例子,但它通常不會比僅僅繪制所有東西產生速度優勢。 (例外情況是,如果您只更新包含大量子圖的圖中的一個子圖。)

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM