2017-03-11 6 views
2

みんな!私はmatplotlibを使用していて、ランダムに生成された円があるフィールドを持っています。また、私はフィールドに新しいランダムな円を生成する必要がありますが、私はそれを押すたびに、ボタンは、フィールド内ではなく、ボタンの内側に生成されるボタンがあります。私が間違っていることを私に見せてください、私はPythonには初めてです(実際に昨日それを学び始めました)。ここに私のコードは次のとおりです。ランダム円を生成するMatplotlibボタン

import numpy as np 
import matplotlib.pyplot as plt 
from matplotlib.widgets import Button 

plt.subplots_adjust(bottom=0.2) 

N = 10 
x = np.random.rand(N) 
y = np.random.rand(N) 
colors = np.random.rand(N) 
area = np.pi * 0.2 
l = plt.scatter(x, y, s=area, c=colors, alpha=0.8) 


def gen(event): 
    N = 10 
    x = np.random.rand(N) 
    y = np.random.rand(N) 
    colors = np.random.rand(N) 
    area = np.pi * 0.2 
    plt.scatter(x, y, s=area, c=colors, alpha=0.8) 
    plt.draw() 


axgen = plt.axes([0.81, 0.05, 0.1, 0.075]) 
bgen = Button(axgen, 'Generate') 
bgen.on_clicked(gen) 


plt.show() 

enter image description here

答えて

1

あなたはポイントを描画するために、メインの図の軸を使用することをmatplotlibの指示する必要があります。 plt.scatterを呼び出すと、現在の軸を使用するようにmatplotlibに指示します。この場合、あなたの場合はボタン自体であることがあります。私もfig.canvas.draw()を使用して図全体を更新するfigに現在のフィギュアインスタンスを保存

import numpy as np 
import matplotlib.pyplot as plt 
from matplotlib.widgets import Button 

fig, ax = plt.subplots() 
plt.subplots_adjust(bottom=0.2) 

N = 10 
x = np.random.rand(N) 
y = np.random.rand(N) 
colors = np.random.rand(N) 
area = np.pi * 0.2 
l = plt.scatter(x, y, s=area, c=colors, alpha=0.8) 


def gen(event): 
    N = 10 
    x = np.random.rand(N) 
    y = np.random.rand(N) 
    colors = np.random.rand(N) 
    area = np.pi * 0.2 
    ax.scatter(x, y, s=area, c=colors, alpha=0.8) 
    fig.canvas.draw() 


axgen = plt.axes([0.81, 0.05, 0.1, 0.075]) 
bgen = Button(axgen, 'Generate') 
bgen.on_clicked(gen) 

plt.show() 

注意:ここでは、明示的な軸を使用して、コードの修正版です。使用したplt.draw()も動作しますが、複数の数字がある場合は同様の問題が発生する可能性があります。

1

複数の軸があるとすぐに、どの軸をプロットするかを把握することが重要です。 pyplotコマンドを使用する代わりに、軸に明示的にプロットするmatplotlib apiに固執する必要があります。 plt.scatterの代わりにax.scatter()

import numpy as np 
import matplotlib.pyplot as plt 
from matplotlib.widgets import Button 


fig, ax = plt.subplots() 
plt.subplots_adjust(bottom=0.2) 

N = 10 
x = np.random.rand(N) 
y = np.random.rand(N) 
colors = np.random.rand(N) 
area = np.pi * 0.2 
l = ax.scatter(x, y, s=area, c=colors, alpha=0.8) 


def gen(event): 
    N = 10 
    x = np.random.rand(N) 
    y = np.random.rand(N) 
    colors = np.random.rand(N) 
    area = np.pi * 0.2 
    ax.scatter(x, y, s=area, c=colors, alpha=0.8) 
    plt.draw() 


axgen = plt.axes([0.81, 0.05, 0.1, 0.075]) 
bgen = Button(axgen, 'Generate') 
bgen.on_clicked(gen) 


plt.show() 
+0

ありがとうございました! –

関連する問題