2017-10-31 2 views
-1

バーが描かれるたびに、色がランダムに変わります。どうして? その理由は何ですか?サイクル図面でカラーバーが色を変えるのはなぜですか? (matplotlib)

import matplotlib.pyplot as plt 
from matplotlib import mlab 
fig = plt.figure() 

ax4 = fig.add_subplot(111) 
ax4.set_xlim(-10,80) 
ax4.set_ylim(0,30) 

def view(ylist): 

    xmin = 0 
    xmax = 70.0 
    dx = 10 
    xlist = mlab.frange (xmin, xmax, dx) 

    ax4.bar(xlist, ylist, dx) 
    plt.pause(0.5) 
    plt.draw() 

ylist = [0 for p in range(8)] 
for i in range(10): 
    view(ylist) 
    ylist[0] +=1 
    ylist[3] +=2 

plt.close() 

コードバーを実行している間に色が周期的に変化していますが、どうして? 質問は何ですか - 問題は何ですか?

+0

hm ...なぜ私を言葉なしに置くのですか...それは本当にばかげた質問ですか? –

答えて

1

問題は、すべて同じ軸上に10種類の棒をプロットしていることです。あなたのバーは同じx座標でプロットされているので、お互いの上にプロットされています。これはまだあなたの他のバーがまだそこにあることを意味し、matplotlibはプロットされる "新しい"バーの色を循環させます。

あなたができることは2つあります。まず、現在の軸をクリアするplt.cla()と呼ぶことができます。これはあなたのy軸の限界をリセットします(何も起こっていないように見えます)。つまり、ax4.set_ylim(0,20)を使用してy軸の制限を設定する必要があります。

第2に、バーにする色をax4.bar()に指定できます(これはまだ古いバーにプロットされていますが)。

import matplotlib.pyplot as plt 
from matplotlib import mlab 

fig = plt.figure() 

ax4 = fig.add_subplot(111) 
ax4.set_xlim(-10,80) 
ax4.set_ylim(0,30) 

def view(ylist): 

    xmin = 0 
    xmax = 70.0 
    dx = 10 
    xlist = mlab.frange (xmin, xmax, dx) 

    plt.cla() 
    ax4.set_ylim(0,20) 
    ax4.bar(xlist, ylist, dx) # can add color="blue" if you don't want to use plt.cla() 
    plt.pause(0.5) 
    plt.draw() 

ylist = [0 for p in range(8)] 
for i in range(10): 
    view(ylist) 
    ylist[0] +=1 
    ylist[3] +=2 

plt.close() 
+0

ありがとうございました。最後の質問は: 'plt.cla()'はメモリをクリアしますか? –

関連する問題