2016-12-14 4 views
1

私は、matplotlibで私のCPU使用量をグラフ化するコードを持っています。しかし、私はこのコードがFuncAnimationの機能を適切に利用していないと感じています。私は現在軸とグラフのすべてをクリアすると私のアニメーションループでclear()関数を使用していますか?私は、グラフ全体を消去するのではなく、グラフ全体を消去する方法があることを知っていますが、方法はわかりません。私はコードを実行すると出力されますが、私のCPU使用量に目立つジャンプがあります。だからnumebr 1.)私は何をしようとしている一般的に良い方法がありますか? (私のCPU使用量をリアルタイムでグラフ化する)。 2.)私の方法が大丈夫なら、資源をより少なくする方法はありますか?cpuのライブデータでmatplotlibアニメーションを実装する方がいいですか?

import psutil 
import matplotlib.pyplot as plt 
import matplotlib as mpl 
import matplotlib.animation as animation 
from collections import deque 

fig = plt.figure() 
ax1 = fig.add_subplot(111) 

y_list = deque([-1]*150) 


def animate(i): 

    y_list.pop() 
    y_list.appendleft(psutil.cpu_percent(None,False)) 

    ax1.clear() 
    ax1.plot(y_list) 
    ax1.set_xlim([0, 150]) 
    ax1.set_ylim([0, 100]) 

ax1.axes.get_xaxis().set_visible(False) 

anim = animation.FuncAnimation(fig, animate, interval=200) 
plt.show() 

そのが実行しているとき、それは正常に見えるが、私は私のラップトップのファンがそのがやって何のために私が好きよりももう少し増やし聞くことができます。

enter image description here

答えて

1

FuncAnimation

fig = plt.figure() 
ax = plt.axes(xlim=(0, 200), ylim=(0, 100)) 
line, = ax.plot([],[]) 

y_list = deque([-1]*400) 
x_list = deque(np.linspace(200,0,num=400)) 


def init(): 
    line.set_data([],[]) 
    return line, 


def animate(i): 
    y_list.pop() 
    y_list.appendleft(psutil.cpu_percent(None,False)) 
    line.set_data(x_list,y_list) 
    return line, 

anim = animation.FuncAnimation(fig, animate, init_func=init, 
          frames=200, interval=100, blit=True) 

plt.show() 
に渡す blit=True kwargを使用して init()関数を定義することを考え出し
関連する問題