簡體   English   中英

Matplotlib 動畫散點圖如何在不疊加數據的情況下完成?

[英]How animation scatter plot with Matplotlib can be done with not superimposed data?

我想做一個動畫散點圖,每幀只有一對 x,y 數據。

我編寫的代碼創建了一個動畫散點圖,但舊點出現在圖中,這意味着在圖上添加了新點,保留了舊點。

對於下面的代碼,我希望每幀有一個點,就像 x 軸上的移動點一樣,而不是再增加一個值。

我嘗試使用plt.clf()但隨后所有數據都消失了。

%matplotlib notebook
from bokeh.plotting import figure, output_file, show
import pandas
import numpy as np
import matplotlib.animation as animation
from matplotlib.animation import FuncAnimation, PillowWriter
import matplotlib.pyplot as plt

writer = PillowWriter(fps=10)

list_x=[1,2,3,4,5,6,7,8,9]
list_y=[5,5,5,5,5,5,5,5,5]

def plot(listax, listay):
    
    plt.scatter(listax, listay, c='blue', alpha=0.5)

    plt.show()

fig2 = plt.figure()
plt.xlim([0, 10])
plt.ylim([0, 10])
with writer.saving(fig2, "plotvideo.gif", 100):
    for i in range(0, len(list_x)):
        x_value = list_x[i]
        y_value = list_y[i]
        
        writer.grab_frame()
        plot(x_value, y_value)

對點對象使用 .remove() 方法將它們從圖中刪除。

我會試試這個:

from bokeh.plotting import figure, output_file, show
import pandas
import numpy as np
import matplotlib.animation as animation
from matplotlib.animation import FuncAnimation, PillowWriter
import matplotlib.pyplot as plt
import time

writer = PillowWriter(fps=10)

list_x=[1,2,3,4,5,6,7,8,9]
list_y=[5,5,5,5,5,5,5,5,5]
points = []

def plot(listax, listay, j):
    
    points.append(plt.scatter(listax[j], listay[j], c='blue', alpha=0.5))
    if len(points) == 2:
        points[0].remove()
        points.pop(0)
    plt.show(block=False)

fig2 = plt.figure()
plt.xlim([0, 10])
plt.ylim([0, 10])
with writer.saving(fig2, "plotvideo.gif", 100):
    for i in range(0, len(list_x)):
        x_value = list_x
        y_value = list_y
        
        writer.grab_frame()
        print(points)
        plot(x_value, y_value, i)

請參閱此鏈接以獲得更好的解釋(盡管有不同的實現): 如何從圖中刪除點?

暫無
暫無

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

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