簡體   English   中英

matplotlib blitting(動畫情節)無法調整圖形大小

[英]matplotlib blitting (animated plot) can't resize figure

我有一條動畫線,使用matplotlib 網站上給出的示例:

import matplotlib.pyplot as plt
import numpy as np

x = np.linspace(0, 2 * np.pi, 100)

fig, ax = plt.subplots()

(ln,) = ax.plot(x, np.sin(x), animated=True)

plt.show(block=False)
plt.pause(0.1)

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

ax.draw_artist(ln)

fig.canvas.blit(fig.bbox)

for j in range(100):
    fig.canvas.restore_region(bg)
    ln.set_ydata(np.sin(x + (j / 100) * np.pi))
    ax.draw_artist(ln)
    fig.canvas.blit(fig.bbox)
    fig.canvas.flush_events()

這產生了 plot:

常規圖

當我調整圖中 window 的大小時,它不再按預期工作:

調整大小的圖

這里有什么問題?

我有同樣的問題。 這似乎發生在您將背景的 bitmap 保存為第一幀並避免重繪它時。 我發現這可以通過檢查調整大小並將背景更新為新背景來解決。 您的示例固定如下:

import matplotlib.pyplot as plt
import numpy as np

x = np.linspace(0, 2 * np.pi, 100)

fig, ax = plt.subplots()

(ln,) = ax.plot(x, np.sin(x), animated=True)

plt.show(block=False)
plt.pause(0.1)

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

ax.draw_artist(ln)

fig.canvas.blit(fig.bbox)
old_fig_size = fig.get_size_inches()

for j in range(100):
    if (old_fig_size != fig.get_size_inches()).any():
        bg = fig.canvas.copy_from_bbox(fig.bbox)   
        old_fig_size = fig.get_size_inches()
    fig.canvas.restore_region(bg)

    ln.set_ydata(np.sin(x + (j / 100) * np.pi))
    ax.draw_artist(ln)
    fig.canvas.blit(fig.bbox)
    fig.canvas.flush_events()

暫無
暫無

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

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