对象上的matplotlib小部件滑块(椭圆) [英] matplotlib widgets slider on object (Ellipse)

查看:87
本文介绍了对象上的matplotlib小部件滑块(椭圆)的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我希望通过更改滑块 d_in 来更改对象(椭圆)的 x 位置 (=d_in).这是我得到的:

I want that the x-position (=d_in) of my object (the Ellipse) is changed by changing the slider d_in. This is what I got:

from numpy import pi, sin
import numpy as np
import matplotlib.pyplot as plt
from matplotlib.widgets import Slider, Button, RadioButtons
from matplotlib.patches import Ellipse
from scipy.optimize import fsolve
import pylab


axis_color = 'lightgoldenrodyellow'
#variable
d_in=80

fig = plt.figure(figsize=(12,6))
ax = fig.add_subplot(111)
fig.subplots_adjust(left=0.25, bottom=0.35)
x = np.arange(0.0, 300, 0.01)


# object ellipse
Spiegel = Ellipse(xy=(d_in, 0), width=2, height=73.2,
                        edgecolor='black', fc='#808080', lw=1)
ax.add_patch(Spiegel)


#Draw d_in slider
d_in_slider_ax = fig.add_axes([0.25, 0.1, 0.65, 0.03], axisbg=axis_color)
d_in_slider = Slider(d_in_slider_ax, 'd_in', 1, 150, valinit=d_in)


#axis range
ax.set_xlim([0, 300])
ax.set_ylim([-40, 40])

plt.show()

如何告诉滑块更改椭圆的位置?

How can I tell the slider to change the position of the Ellipse?

谢谢

推荐答案

当滑块值改变时,您需要注册一个回调,

You need to register a callback for when the slider values changes,

slider.on_changed(callback)

在回调中,更新椭圆的位置

and inside that callback, update the position of the ellipse

ellipse.center = new_center

在这里,这可能如下所示

Here, this could look as follows

import numpy as np
import matplotlib.pyplot as plt
from matplotlib.widgets import Slider
from matplotlib.patches import Ellipse

#variable
d_in=80

fig = plt.figure(figsize=(12,6))
ax = fig.add_subplot(111)
fig.subplots_adjust(left=0.25, bottom=0.35)
x = np.arange(0.0, 300, 0.01)


# object ellipse
Spiegel = Ellipse(xy=(d_in, 0), width=2, height=73.2,
                  edgecolor='black', fc='#808080', lw=1)
ax.add_patch(Spiegel)


#Draw d_in slider
d_in_slider_ax = fig.add_axes([0.25, 0.1, 0.65, 0.03])
d_in_slider = Slider(d_in_slider_ax, 'd_in', 1, 150, valinit=d_in)

def update(val):
    Spiegel.center = (val,0)

d_in_slider.on_changed(update)


#axis range
ax.set_xlim([0, 300])
ax.set_ylim([-40, 40])

plt.show()

这篇关于对象上的matplotlib小部件滑块(椭圆)的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆