diff --git a/pyproject.toml b/pyproject.toml index f05b704..3618ce9 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -37,6 +37,7 @@ dependencies = [ "nmrglue>=0.11", "navani>=0.1.11", "datalab-server >= 0.5.3", + "bokeh==3.4.3", ] [project.optional-dependencies] local = ["datalab-api >= 0.2.10"] diff --git a/src/datalab_app_plugin_insitu/apps/nmr/blocks.py b/src/datalab_app_plugin_insitu/apps/nmr/blocks.py index 0bb106d..f8438f3 100644 --- a/src/datalab_app_plugin_insitu/apps/nmr/blocks.py +++ b/src/datalab_app_plugin_insitu/apps/nmr/blocks.py @@ -3,9 +3,9 @@ from pathlib import Path from typing import Any, Dict, List, Optional, Tuple -import bokeh.embed import numpy as np import pandas as pd +from bokeh.embed import components from bokeh.events import DoubleTap from bokeh.layouts import gridplot from bokeh.models import ( @@ -263,7 +263,8 @@ def generate_insitu_nmr_plot( grid = [[None, nmrplot_figure], [echemplot_figure, heatmap_figure]] gp = gridplot(grid, merge_tools=True) - self.data["bokeh_plot_data"] = bokeh.embed.json_item(gp, theme=DATALAB_BOKEH_THEME) + script, div = components(gp, theme=DATALAB_BOKEH_THEME) + self.data["bokeh_plot_data"] = {"script": script, "div": div} return self.data.get("time_data"), ["Plot successfully generated"] @@ -392,11 +393,13 @@ def _create_heatmap_figure( color_mapper = LinearColorMapper(palette="Turbo256", low=intensity_min, high=intensity_max) + flipped_intensity_matrix = np.fliplr(intensity_matrix) + heatmap_figure.image( - image=[intensity_matrix], - x=max(ppm_values), + image=[flipped_intensity_matrix], + x=min(ppm_values), y=time_range["start"], - dw=abs(max(ppm_values) - min(ppm_values)), + dw=max(ppm_values) - min(ppm_values), dh=time_range["end"] - time_range["start"], color_mapper=color_mapper, level="image",