首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Matplotlib无法生成准确的滑块图

Matplotlib无法生成准确的滑块图
EN

Stack Overflow用户
提问于 2019-09-11 03:56:13
回答 1查看 57关注 0票数 0

我有以下方程式:

代码语言:javascript
复制
y = ((b-6(x**k))/c)**(1/k)
k = 10/(6+c)

我知道当k>1时,y是凹的,当0

生成动态绘图的代码:

代码语言:javascript
复制
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)
x = np.arange(0.0, 1.0, 0.001)
b_init = 1
c_init = 0
k = 10/(6+c_init)
delta_f = 1.0
y = ((b_init-6*(x**k))/c_init)**(1/k)
l, = plt.plot(x, y, lw=2)
ax.margins(x=0)

axcolor = 'lightgoldenrodyellow'
ax_b = plt.axes([0.25, 0.1, 0.65, 0.03], facecolor=axcolor)
ax_c = plt.axes([0.25, 0.15, 0.65, 0.03], facecolor=axcolor)

s_b = Slider(ax_b, 'b', 0.1, 18.0, valinit=b_init, valstep=delta_f)
s_c = Slider(ax_c, 'c', 0.1, 12.0, valinit=c_init)


def update(val):
    b = s_b.val
    c = s_c.val
    l.set_ydata(((b-6*(x**k))/c)**(1/k))
    fig.canvas.draw_idle()


s_b.on_changed(update)
s_c.on_changed(update)

resetax = plt.axes([0.8, 0.025, 0.1, 0.04])
button = Button(resetax, 'Reset', color=axcolor, hovercolor='0.975')


def reset(event):
    s_b.reset()
    s_c.reset()
button.on_clicked(reset)

def colorfunc(label):
    l.set_color(label)
    fig.canvas.draw_idle()

plt.show()
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2019-09-11 04:40:52

如果您正在使用juypter notebooks,您可以使用来自ipywidgets的小部件,如下所示。此外,如果您打印出b、c和k值,可能会对获得直觉有所帮助。

代码语言:javascript
复制
%matplotlib inline
import numpy as np
import matplotlib.pyplot as p
from ipywidgets import *

def y(x,b,c):
    k = 10/(6+c)
    print(f' b={b:.3f},c={c:.3f},k={k:.3f}')
    y = ((b-6*(x**k))/c)**(1/k)
    return y

def inter(b0,c0):
    y1=y(x,b0,c0)
    p.figure(figsize=(20,6))
    p.plot(x,y1)

dx=0.001    
x = np.arange(0, 1.0+dx, dx)  #  assuming you want to go to 1 inclusively

b0=widgets.FloatSlider(value=10,min=-1,max=18.0,step=0.01, 
                       description='b0', 
                       continuous_update=False,
                       readout_format='.3f',
                       layout=Layout(width='90%', height='20px'))

c0=widgets.FloatSlider(value=0.1,min=-1,max=12.0,step=0.01, 
                       description='c0', 
                       continuous_update=False,
                       readout_format='.3f',
                       layout=Layout(width='90%', height='20px'))

interact(inter, b0=b0,c0=c0);

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/57877433

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档