Mesh Timeseries¶
Mesh layers can provide multiple values for each vertex. This could represent changes in signal across time, different metrics (curvature and thickness) or different statistical measures (probability, z-score, effect size). This notebook provides a slider that allows you to interactively choose the frame_4d property of the layer.
This Python script mirrors the mesh time series web page.
In [1]:
import ipywidgets as widgets
from IPython.display import display
from ipyniivue import NiiVue, SliceType
nv = NiiVue(
show_3d_crosshair=True,
back_color=(0.9, 0.9, 1, 1),
)
nv.set_slice_type(SliceType.RENDER)
# Load meshes
mesh_layers = [
{
"path": "../images/Human.colin.R.FUNCTIONAL.71723.func.gii",
"colormap": "rocket",
"opacity": 0.7,
},
]
meshes = [
{
"path": "../images/Human.colin.Cerebral.R.VERY_INFLATED.71723.surf.gii",
"rgba255": [255, 255, 255, 255],
"layers": mesh_layers,
},
]
nv.load_meshes(meshes)
# Set the clip plane
nv.set_clip_plane(-0.1, 270, 0)
## User interface
# Timepoint Slider
slider_timepoint = widgets.IntSlider(min=0, max=1, value=0, description="Timepoint", readout=False)
def on_timepoint_change(change):
"""Set mesh layer frame 4D."""
nv.set_mesh_layer_property(nv.meshes[0].id, 0, "frame_4d", change["new"])
slider_timepoint.observe(on_timepoint_change, names="value")
# Opacity Slider
slider_opacity = widgets.IntSlider(min=1, max=10, value=7, description="Opacity", readout=False)
def on_opacity_change(change):
"""Set mesh layer opacity."""
nv.set_mesh_layer_property(nv.meshes[0].id, 0, "opacity", change["new"] * 0.1)
slider_opacity.observe(on_opacity_change, names="value")
shader_options = nv.mesh_shader_names()
shader_dropdown = widgets.Dropdown(
options=shader_options,
value="Phong", # Default shader
description="Shader:",
)
def on_shader_change(change):
"""Set mesh layer shader."""
nv.set_mesh_shader(nv.meshes[0].id, change["new"])
shader_dropdown.observe(on_shader_change, names="value")
controls = widgets.HBox([slider_timepoint, slider_opacity, shader_dropdown])
## Display
display(controls)
display(nv)
In [ ]:
In [ ]: