"""Embed both vedo and matplotlib charts in a single interactive scene."""
import numpy as np
from vedo import Plotter, Points, Image, settings
from vedo.pyplot import histogram, plot
import matplotlib.pyplot as plt


def func(w, evt=""):
    # Filter data by slider threshold and update all overlays.
    d = data[data > w.value]
    if len(d) == 0:
        return

    ############################################# Vedo Plot
    xy = plot(
        d,
        1 + np.sin(d),
        c="purple4",
        lw=0,
        alpha=0.75,
        aspect=16 / 9,
        title="Vedo Plot of 1+sin(z) vs z",
        xtitle="independent variable",
        ytitle="dependent variable",
    )
    xy = xy.clone2d("top-right", size=0.7, ontop=False)
    xy.name = "myplots"

    ############################################# Vedo Histogram
    hi = histogram(
        d,
        c="orange4",
        alpha=1,
        aspect=16 / 9,
        title="Vedo Histogram",
        xtitle="stochastic variable",
        ytitle="frequency",
        label="my histogram",
        mc="red5",
    )
    hi.add_legend(s=1.2, alpha=0.1)
    hi = hi.clone2d("bottom-right", size=0.7, ontop=True)
    hi.name = "myplots"

    ############################################# Matplotlib histogram
    fig.clf()  # clear the figure
    plt.hist(1-d*d, bins=20, color="green", edgecolor="black")
    img = Image(fig).clone2d("middle-left", size=0.4)
    img.name = "myplots"
    vplt.remove("myplots").add(xy, hi, img)


#############################################################
settings.default_font = "Roboto"

fig = plt.figure(figsize=(8, 6))  # create a matplotlib figure

msh = Points(np.random.randn(1000, 3)).ps(5).c("blue5")
data = msh.points[:, 2]
vplt = Plotter(bg="w", bg2="green9", size=(900, 900))
slider = vplt.add_slider(
    func,
    xmin=-1,
    xmax=1,
    value=0,
    title="slider",
    pos=1,
    # delayed=True,  # update only when the slider is released
)
vplt.show(msh)
vplt.close()
