我用mathplotlib编写了一个python脚本。 我有3个滑块“r1”,“r2”,“dist”。
r1是圆1的半径。 r2是圆2的半径。 dist是圆圈1和2之间的距离。
现在我要打印两个圆圈。 1.圆半径应该具有滑块r1的值。 2.圆半径应该具有滑块r2的值。 并且x轴上两个圆之间的距离应该是slider 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 :(得分:1)
可以通过circle = plt.circle((x,y), radius)
创建一个圆圈,然后使用ax.add_patch(cicle)
将其添加到轴中。
其半径可以circle.set_radius
更新,其中心可以设置为circle.center = x,y
(不幸的是它没有set_position
或set_xy
。像其他艺术家一样的方法)。
完整示例:
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()