2016-12-14 10 views
0

グラフ上の点を結ぶ線を滑らかにするのに問題があります。私はアニメーショングラフを実行しているので、もっと難しいようです。私がオンラインで見たすべての例は、静的グラフの例です。私はこの補間の例を試してみましたが、うまくいかないようです。そこにあるmatplotlibの達人?グラフのコードは次のとおりです。matplotlib、滑らかなグラフを作る

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


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

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


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() 
+0

[ゆっくりと滑らかな描画線パイソンmatplotlibの]の可能な重複(http://stackoverflow.com/questions/27385619/slow-and-smooth-drawing-lines-python-matplotlib) –

+0

@MikeJSChoi重複していません。ここでのこの質問では、「スムース」とは画面上の線のスムージングを指し、リンクされた質問では「スムーズ」はアニメーションの遷移を指します。 – ImportanceOfBeingErnest

+0

@HexxNine "この補間例"とは何ですか?あなたはそれにリンクできますか?滑らかな線で正確に何を意味するのかを言う必要がありますか?直線か、平均か曲線か?補間の他の例は、あなたにとってどれほど効果的ではありませんか?どこに問題がありますか? – ImportanceOfBeingErnest

答えて

1

スムージングにはさまざまな種類があります。我々は、平均を示す線、またはフィルタリング関数またはスプラインについて考えることができる。以下の3つの方法をすべて実装しました。

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

import scipy.ndimage.filters 
import scipy.interpolate 


fig = plt.figure() 
ax = plt.axes(xlim=(0, 200), ylim=(0, 100)) 
line, = ax.plot([],[], color="b", label="cpu") 
mean_line, = ax.plot([],[], linestyle="--", color="k",label="mean") 
filter_line, = ax.plot([],[], linewidth=2, color="r", label="gauss filter") 
interp_line, = ax.plot([],[], linewidth=1.5, color="purple", label="spline") 

plt.legend() 
y_list = deque([-1]*200) 
x_list = deque(np.arange(200,0,-1)) 


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) 
    x = np.array(x_list) 
    y = np.array(y_list) 
    filtered = scipy.ndimage.filters.gaussian_filter1d(y, sigma=4) 

    mean_line.set_data(x, np.ones_like(x)*y.mean()) 
    filter_line.set_data(x,filtered) 
    try: 
     tck = scipy.interpolate.splrep(x[::-1], y[::-1], s=50000) 
     interpolated = scipy.interpolate.splev(x[::-1], tck, der=0) 
     interp_line.set_data(x,interpolated[::-1]) 
    except: 
     pass 

    return line,filter_line,mean_line,interp_line, 

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

plt.show() 

enter image description here

関連する問題