1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950 |
- import numpy as np
- import vedo
- def update_plot(widget=None, evt=""):
- k = widget.value if evt else kinit
- #################################################
- y = 2 * k * x / (1 + (k * x)**2) # hill function
- # y = (k*x)**2 * np.sign(k*x) # another function
- # y = 2 * (k * x)**3 / (1 + (k * x)**2)
- #################################################
- # use jet colormap to color the line
- # color = "blue4" if k>0 else "red5"
- color = vedo.color_map(k, name="winter_r", vmin=x[0], vmax=x[-1])
- title = (f"y-mean : {np.mean(y):.3f}, std: {np.std(y):.3f},\n"
- f"y-range: [{np.min(y):.3f}, {np.max(y):.3f}], "
- f"integral: {np.trapezoid(y, x):.3f}")
- p = vedo.pyplot.plot(
- x, y,
- xlim=xrange,
- ylim=yrange,
- c=color, # line color
- lw=3, # line width
- aspect=1.0, # aspect ratio of the plot
- axes={"number_of_divisions":10, "htitle":title, "htitle_size":0.015},
- )
- plt.remove("PlotXY").add(p)
- if yrange[0] is None or yrange[1] is None:
- plt.reset_camera(tight=0.05)
- #####################################################################
- kinit = 0.1 # initial value of the parameter
- xrange = (-1, 1) # set a fixed x axis range
- yrange = (-1, 1) # set a fixed y axis range
- # yrange = (None, None) # uncomment to autoscale y axis
- vedo.settings.default_font = "Roboto"
- x = np.linspace(*xrange, 200, endpoint=True)
- plt = vedo.Plotter(size=(900, 1100))
- plt.add_slider(
- update_plot,
- x[0], x[-1],
- value=kinit,
- title="parameter value",
- pos=5,
- )
- update_plot() # update initial plot
- plt.show("1D Function Viewer\nMove the slider to modify the parameter",
- mode="2d", zoom="tight").close()
|