2017-05-27 12 views
-1

私はmathplotlibでpythonスクリプトを書いた。 私は3つのスライダー "r1"、 "r2"、 "dist"を持っています。Python:インタラクティブGUIを使って円を描きますか?

R1は円1 R2の半径で丸2 DISTのための半径は私は2つの円を印刷したい円1,2今

との間の距離です。 1.円の半径は、スライダr1の値でなければなりません。 2.円の半径は、スライダr2の値でなければなりません。 そして、x軸の2つの円の間の距離は、スライダーdistの値でなければなりません。

私にとっては、このことを描くことは問題ありません。 しかし、スライダを動かすと、円は動かず/変化しません。

私はどのように私は半径とスライダで距離を管理することができるPythonで2つのインタラクティブな円を実装することができますか?

は、私が今まで持っているもの:

import numpy as np 
import matplotlib.pyplot as plt 
from matplotlib.widgets import Slider, Button, RadioButtons 

fig, ax = plt.subplots() 
plt.subplots_adjust(left=0.25, bottom=0.25) 
t = np.arange(0.0, 1.0, 0.001) 
plt.axis([0, 100, 0, 100]) 

axcolor = 'lightgoldenrodyellow' 
sl1 = plt.axes([0.25, 0.15, 0.65, 0.03], facecolor=axcolor) 
sl2 = plt.axes([0.25, 0.1, 0.65, 0.03], facecolor=axcolor) 
sl3 = plt.axes([0.25, 0.05, 0.65, 0.03], facecolor=axcolor) 

slider_r1 = Slider(sl1, 'r1', 0.0, 50.0, 25) 
slider_r2 = Slider(sl2, 'r2', 0.0, 50.0, 25) 
slider_d = Slider(sl3, 'dist', 0.0, 50.0, 25) 



def update(val): 
    print("\nr1: ",slider_r1.val) 
    print("r2: ",slider_r2.val) 
    print("dist: ", slider_d.val) 

slider_r1.on_changed(update) 
slider_r2.on_changed(update) 
slider_d.on_changed(update) 

plt.show() 
+0

私が円を描くために任意のコードが表示されません。 – HYRY

答えて

1

円がcircle = plt.circle((x,y), radius)経由で作成され、ax.add_patch(cicle)を使用して軸を追加することができます。

半径はcircle.set_radiusによって更新することができ、その中心が(残念ながら、それは他のアーティストのようなset_position又はset_xy。メソッドを持っていない)circle.center = x,yとして設定することができます。

コンプリート例:

import matplotlib.pyplot as plt 
from matplotlib.widgets import Slider, Button, RadioButtons 

fig, ax = plt.subplots() 
plt.subplots_adjust(left=0.25, bottom=0.25) 
ax.axis([0, 100, 0, 100]) 
ax.set_aspect("equal") 

axcolor = 'skyblue' 
sl1 = plt.axes([0.25, 0.15, 0.65, 0.03], facecolor=axcolor) 
sl2 = plt.axes([0.25, 0.1, 0.65, 0.03], facecolor=axcolor) 
sl3 = plt.axes([0.25, 0.05, 0.65, 0.03], facecolor=axcolor) 

slider_r1 = Slider(sl1, 'r1', 0.0, 50.0, 25) 
slider_r2 = Slider(sl2, 'r2', 0.0, 50.0, 25) 
slider_d = Slider(sl3, 'dist', 0.0, 100.0, 50) 

circ1 = plt.Circle((25,50), 25, ec="k") 
circ2 = plt.Circle((75,50), 25, ec="k") 
ax.add_patch(circ1) 
ax.add_patch(circ2) 

def update(val): 
    r1 = slider_r1.val 
    r2 = slider_r2.val 
    d = slider_d.val 
    circ1.center = 50-d/2., 50 
    circ2.center = 50+d/2., 50 
    circ1.set_radius(r1) 
    circ2.set_radius(r2) 
    fig.canvas.draw_idle() 

slider_r1.on_changed(update) 
slider_r2.on_changed(update) 
slider_d.on_changed(update) 

plt.show() 

enter image description here

関連する問題