python - Matplotlib 无法生成准确的 slider 图

标签 python numpy matplotlib

我有以下等式:

img

y = ((b-6(x**k))/c)**(1/k)
k = 10/(6+c)

我知道当 k > 1 时 y 是凹的,当 0 < k < 1 时 y 是凸的。然而,问题是在生成的图中,无论 k 的值是多少,它总是会生成凹的 y。我想知道是否有人可以帮助我找出问题所在。

生成动态图的代码:

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()

最佳答案

如果您使用的是 juypter 笔记本,您可以使用 ipywidgets 中的小部件,如下所示。 另外,为了获得直觉,打印出 b、c 和 k 值可能会有所帮助。

%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);

enter image description here

enter image description here

关于python - Matplotlib 无法生成准确的 slider 图,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57877433/

相关文章:

python - 如何使用迭代和变量替换字符串中的字符? (Python)

python - Pandas :替换字符串中的子字符串

python - 运行时警告 : invalid value encountered in long_scalars

python - 类型错误 : use() got an unexpected keyword argument 'warn' when importing matplotlib

python - '无法计算 Pack,因为输入 #1(从零开始)预计是浮点张量,但实际上是 int32 张量 [Op :Pack] name: packed'. tf.squeeze 错误

python - Matplotlib 后端缺少带下划线的模块

python - 操作系统错误 : Can't load tokenizer

python - 如何将 Pandas 时区感知时间戳转换为 UNIX 纪元?

python - 如何使用 numpy.repeat 构建一个数组,其中每个元素比前一个元素多 1%?

python - 如何从多种数据类型的组合 csv 中将数据过滤到独特的 pandas 数据框中?