Thank you both for the suggestions! I am currently trying the "Replot" button approach, but ran into some errors, as follows:
using Reactive, Interact using PyPlot fun(α, β, γ) = cos(α + sin(β+γ)) #example function f = figure(); α=slider(1:0.1:3) β=slider(1:0.1:3) γ=slider(1:0.1:3) replot = button("Replot") # Commit your changes map(display, α, β, γ, replot) # optional --> `start` has no method matching start(::Slider{Float64}) sampled_coeffs = sampleon(redo, lift(tuple, α, β, γ)) --> redo not defined withfig(f) @lift plot(apply(fun, sampled_coeffs)) --> `withfig` has no method matching withfig(::Figure) On Monday, September 8, 2014 6:10:59 PM UTC+2, Shashi Gowda wrote: > > John's suggestion is also a good way to do this. You can sample the > signals at a specific interval instead of on button clicks: > > # At 2 fps, with repeats dropped. > sampled_coeffs = droprepeats(sampleon(fps(2), lift(tuple, α, β, γ))) > > On Mon, Sep 8, 2014 at 9:36 PM, Shashi Gowda <shashi...@gmail.com > <javascript:>> wrote: > >> Unfortunately, the @manipulate macro can only rerun the expression at >> every update of any of its input. >> >> What you need here is Reactive >> <http://julialang.org/Reactive.jl/api.html#sample-and-merge>'s >> `sampleon` function: >> >> using Reactive, Interact >> f = figure(); >> >> α=slider(1:0.1:3) >> β=slider(1:0.1:3) >> γ=slider(1:0.1:3) >> replot = button("Replot") # Commit your changes >> map(display, α, β, γ, replot) # optional >> >> sampled_coeffs = sampleon(redo, lift(tuple, α, β, γ)) >> >> withfig(f) >> >> @lift plot(apply(fun, sampled_coeffs)) >> >> IPython doesn't do update on release, Interact, in fact, uses the same >> widgets. What it does do is have at most 4 updates at any given time in the >> processing pipeline (any more updates replace the last update in the queue). >> >> On Mon, Sep 8, 2014 at 8:45 PM, Andrei Berceanu <andreib...@gmail.com >> <javascript:>> wrote: >> >>> Another option would be to use drop-down boxes with selectable values or >>> custom text boxes instead of sliders, at least as a temporary fix. Anyone >>> knows how I can do that? >>> By the way, iirc, IPython does have the update-on-release mechanism >>> implemented in their interactive widget functionality. >>> >>> On Monday, September 8, 2014 4:10:05 PM UTC+2, John Myles White wrote: >>>> >>>> I suspect the only way to do this is to change Interact so that it >>>> exposes a minimum time threshold before it registers a state change. >>>> >>>> — John >>>> >>>> On Sep 8, 2014, at 4:16 AM, Andrei Berceanu <andreib...@gmail.com> >>>> wrote: >>>> >>>> > I have some code along the lines of >>>> > >>>> > f = figure() >>>> > @manipulate for α=1:0.1:3, β=1:0.1:3, γ=1:0.1:3; withfig(f) do >>>> > y = fun(α,β,γ) >>>> > PyPlot.plot(x, y) >>>> > end >>>> > end >>>> > >>>> > where fun is a *very slow* function to evaluate. Is there any way to >>>> tell @manipulate to update the resulting plot only after I release the >>>> sliders? Otherwise what I get is, I release them to the desised values and >>>> then have to wait ages for all the intermediate plots to be drawn. >>>> > >>>> > Tnx! >>>> >>>> >> >