Embedding Plotly Charts in Stipple.
See the docstrings of watchplots()
and watchplot()
for more details!
using Stipple, Stipple.ReactiveTools
using StipplePlotly
using PlotlyBase
@app Example begin
@mixin plot::PBPlotWithEvents
@in plot_cursor = Dict{String, Any}()
@onchange isready begin
isready || return
p = Plot(scatter(y=1:10))
plot.layout = p.layout
plot.data = p.data
end
@onchange plot_selected begin
haskey(plot_selected, "points") && @info "Selection: $(getindex.(plot_selected["points"], "pointIndex"))"
end
@onchange plot_click begin
@info "$plot_click"
end
@onchange plot_hover begin
@info "hovered over $(plot_hover["points"][1]["x"]):$(plot_hover["points"][1]["y"])"
# @info "$plot_hover"
end
@onchange plot_cursor begin
@info "cursor moved to $(plot_cursor["cursor"]["x"]):$(plot_cursor["cursor"]["y"])"
# @info "$plot_cursor"
end
end
# commented lines below: manual definition of plot_events
# @app Example begin
# @in plot = Plot()
# @in plot_selected = Dict{String, Any}()
# @in plot_click = Dict{String, Any}()
# @in plot_hover = Dict{String, Any}()
# @in plot_cursor = Dict{String, Any}()
# end
@mounted Example watchplots()
# the keyword argument 'keepselection' (default = false) controls whether the selection outline shall be removed after selection
function ui()
cell(class = "st-module", [
plotly(:plot, syncevents = true, keepselection = false),
])
end
@page("/", ui, model = Example)
Possible forwarded events are
- '_selected' (Selection changed)
- '_hover' (hovered over data point)
- '_click' (click event on plot area)
- '_relayout' (plot layout changed)
- '_cursor' (current mouse position, not covered in PBPlotWithEvents in order to reduce data traffic)
For more Stipple Plotly Demos please check: Stipple Demos Repo
Handling of Plotly Events was highly inspired by the PlotlyJS package by Spencer Lyon