Wiggle visual¶
Show the wiggle visual.
Tags: wiggle, panzoom, texture

import numpy as np
import datoviz as dvz
def load_data(channels, samples):
    """Create a texture with the given number of channels and samples."""
    c0 = channels / 2.0
    alpha = 2 * np.pi * 8
    beta = 1.0
    s = np.linspace(0, 1, samples)
    x = s - 0.5
    y = np.sinc(alpha * x / np.pi)
    c = np.arange(channels).reshape(-1, 1)
    gamma = np.exp(-beta * ((2 * (c - c0) / c0) ** 2))
    texdata = gamma * y
    return texdata.astype(np.float32).reshape((channels, samples))
channels = 16
samples = 1024
data = load_data(channels, samples)
height, width = data.shape
position = np.array([[0, 0, 0]], dtype=np.float32)
size = np.array([[width, height]], dtype=np.float32)
anchor = np.array([[0, 0]], dtype=np.float32)
texcoords = np.array([[0, 0, 1, 1]], dtype=np.float32)
app = dvz.App()
figure = app.figure(gui=True)
panel = figure.panel()
panzoom = panel.panzoom()
visual = app.wiggle(
    scale=1.0,
    negative_color=(128, 128, 128, 255),
    positive_color=(0, 0, 0, 255),
    edgecolor=(0, 0, 0, 255),
)
texture = app.texture_2D(data, interpolation='linear')
visual.set_texture(texture)
panel.add(visual)
scale = dvz.Out(1.0)
@app.connect(figure)
def on_gui(ev):
    dvz.gui_pos(dvz.vec2(10, 10), dvz.vec2(0, 0))
    dvz.gui_size(dvz.vec2(200, 70))
    dvz.gui_begin('Change the scale', 0)
    has_changed = False
    has_changed |= dvz.gui_slider('scale', 0.1, 5, scale)
    dvz.gui_end()
    if has_changed:
        visual.set_scale(scale.value)
app.run()
app.destroy()