Here are the examples of the python api panel.pane.HoloViews taken from open source projects. By voting up you can indicate which examples are most useful and appropriate.
21 Examples
3
Source : test_holoviews.py
with BSD 3-Clause "New" or "Revised" License
from holoviz
with BSD 3-Clause "New" or "Revised" License
from holoviz
def test_holoviews_pane_initialize_empty(document, comm):
pane = HoloViews()
# Create pane
row = pane.get_root(document, comm=comm)
assert isinstance(row, BkRow)
assert len(row.children) == 1
model = row.children[0]
assert isinstance(model, BkSpacer)
pane.object = hv.Curve([1, 2, 3])
model = row.children[0]
assert isinstance(model, Figure)
@hv_available
3
Source : test_holoviews.py
with BSD 3-Clause "New" or "Revised" License
from holoviz
with BSD 3-Clause "New" or "Revised" License
from holoviz
def test_holoviews_updates_widgets(document, comm):
hmap = hv.HoloMap({(i, chr(65+i)): hv.Curve([i]) for i in range(3)}, kdims=['X', 'Y'])
hv_pane = HoloViews(hmap)
layout = hv_pane.get_root(document, comm)
hv_pane.widgets = {'X': Select}
assert isinstance(hv_pane.widget_box[0], Select)
assert isinstance(layout.children[1].children[0].children[0], BkSelect)
hv_pane.widgets = {'X': DiscreteSlider}
assert isinstance(hv_pane.widget_box[0], DiscreteSlider)
assert isinstance(layout.children[1].children[0].children[0], BkColumn)
assert isinstance(layout.children[1].children[0].children[0].children[1], BkSlider)
@hv_available
3
Source : test_holoviews.py
with BSD 3-Clause "New" or "Revised" License
from holoviz
with BSD 3-Clause "New" or "Revised" License
from holoviz
def test_holoviews_widgets_update_plot(document, comm):
hmap = hv.HoloMap({(i, chr(65+i)): hv.Curve([i]) for i in range(3)}, kdims=['X', 'Y'])
hv_pane = HoloViews(hmap, backend='bokeh')
layout = hv_pane.get_root(document, comm)
cds = layout.children[0].select_one(ColumnDataSource)
assert cds.data['y'] == np.array([0])
hv_pane.widget_box[0].value = 1
hv_pane.widget_box[1].value = chr(65+1)
assert cds.data['y'] == np.array([1])
@hv_available
3
Source : test_holoviews.py
with BSD 3-Clause "New" or "Revised" License
from holoviz
with BSD 3-Clause "New" or "Revised" License
from holoviz
def test_holoviews_linked_axes(document, comm):
c1 = hv.Curve([1, 2, 3])
c2 = hv.Curve([1, 2, 3])
layout = Row(HoloViews(c1, backend='bokeh'), HoloViews(c2, backend='bokeh'))
row_model = layout.get_root(document, comm=comm)
p1, p2 = row_model.select({'type': Figure})
assert p1.x_range is p2.x_range
assert p1.y_range is p2.y_range
@hv_available
3
Source : test_holoviews.py
with BSD 3-Clause "New" or "Revised" License
from holoviz
with BSD 3-Clause "New" or "Revised" License
from holoviz
def test_holoviews_linked_axes_flexbox(document, comm):
c1 = hv.Curve([1, 2, 3])
c2 = hv.Curve([1, 2, 3])
layout = FlexBox(HoloViews(c1, backend='bokeh'), HoloViews(c2, backend='bokeh'))
row_model = layout.get_root(document, comm=comm)
p1, p2 = row_model.select({'type': Figure})
assert p1.x_range is p2.x_range
assert p1.y_range is p2.y_range
@hv_available
3
Source : test_holoviews.py
with BSD 3-Clause "New" or "Revised" License
from holoviz
with BSD 3-Clause "New" or "Revised" License
from holoviz
def test_holoviews_linked_axes_merged_ranges(document, comm):
c1 = hv.Curve([1, 2, 3])
c2 = hv.Curve([0, 1, 2, 3, 4])
layout = Row(HoloViews(c1, backend='bokeh'), HoloViews(c2, backend='bokeh'))
row_model = layout.get_root(document, comm=comm)
p1, p2 = row_model.select({'type': Figure})
assert p1.x_range is p2.x_range
assert p1.y_range is p2.y_range
assert p1.y_range.start == -0.4
assert p1.y_range.end == 4.4
@hv_available
3
Source : test_holoviews.py
with BSD 3-Clause "New" or "Revised" License
from holoviz
with BSD 3-Clause "New" or "Revised" License
from holoviz
def test_holoviews_linked_x_axis(document, comm):
c1 = hv.Curve([1, 2, 3])
c2 = hv.Curve([1, 2, 3], vdims='y2')
layout = Row(HoloViews(c1, backend='bokeh'), HoloViews(c2, backend='bokeh'))
row_model = layout.get_root(document, comm=comm)
p1, p2 = row_model.select({'type': Figure})
assert p1.x_range is p2.x_range
assert p1.y_range is not p2.y_range
@hv_available
3
Source : test_holoviews.py
with BSD 3-Clause "New" or "Revised" License
from holoviz
with BSD 3-Clause "New" or "Revised" License
from holoviz
def test_holoviews_axiswise_not_linked_axes(document, comm):
c1 = hv.Curve([1, 2, 3])
c2 = hv.Curve([1, 2, 3]).opts(axiswise=True, backend='bokeh')
layout = Row(HoloViews(c1, backend='bokeh'), HoloViews(c2, backend='bokeh'))
row_model = layout.get_root(document, comm=comm)
p1, p2 = row_model.select({'type': Figure})
assert p1.x_range is not p2.x_range
assert p1.y_range is not p2.y_range
@hv_available
3
Source : test_holoviews.py
with BSD 3-Clause "New" or "Revised" License
from holoviz
with BSD 3-Clause "New" or "Revised" License
from holoviz
def test_holoviews_shared_axes_opt_not_linked_axes(document, comm):
c1 = hv.Curve([1, 2, 3])
c2 = hv.Curve([1, 2, 3]).opts(shared_axes=False, backend='bokeh')
layout = Row(HoloViews(c1, backend='bokeh'), HoloViews(c2, backend='bokeh'))
row_model = layout.get_root(document, comm=comm)
p1, p2 = row_model.select({'type': Figure})
assert p1.x_range is not p2.x_range
assert p1.y_range is not p2.y_range
@hv_available
3
Source : test_holoviews.py
with BSD 3-Clause "New" or "Revised" License
from holoviz
with BSD 3-Clause "New" or "Revised" License
from holoviz
def test_holoviews_not_linked_axes(document, comm):
c1 = hv.Curve([1, 2, 3])
c2 = hv.Curve([1, 2, 3])
layout = Row(
HoloViews(c1, backend='bokeh'),
HoloViews(c2, backend='bokeh', linked_axes=False)
)
row_model = layout.get_root(document, comm=comm)
p1, p2 = row_model.select({'type': Figure})
assert p1.x_range is not p2.x_range
assert p1.y_range is not p2.y_range
@hv_available
3
Source : test_links.py
with BSD 3-Clause "New" or "Revised" License
from holoviz
with BSD 3-Clause "New" or "Revised" License
from holoviz
def test_hvplot_jscallback(document, comm):
points1 = hv.Points([1, 2, 3])
hvplot = HoloViews(points1)
hvplot.jscallback(**{'x_range.start': "some_code"})
model = hvplot.get_root(document, comm=comm)
x_range = hvplot._plots[model.ref['id']][0].handles['x_range']
customjs = x_range.js_property_callbacks['change:start'][-1]
assert customjs.args['source'] is x_range
assert customjs.code == "try { some_code } catch(err) { console.log(err) }"
@hv_available
0
Source : AutoViz_Holo.py
with Apache License 2.0
from AutoViML
with Apache License 2.0
from AutoViML
def draw_kdeplot_hv(dfin, cats, nums, chart_format, problem_type, dep, ls_objects, mk_dir, verbose=0):
dft = copy.deepcopy(dfin)
image_count = 0
imgdata_list = list()
N = len(nums)
cols = 2
width_size = 600
height_size = 400
plot_name = 'kde_plots'
########################################################################################
if problem_type.endswith('Classification'):
colors = cycle('brycgkbyrcmgkbyrcmgkbyrcmgkbyr')
pdf1 = pd.DataFrame(dfin[dep].value_counts().reset_index())
pdf2 = pd.DataFrame(dfin[dep].value_counts(1).reset_index())
drawobj41 = pdf1.hvplot(kind='bar', color='r', title='Distribution of Target variable').opts(
height=height_size, width=width_size,xrotation=70)
drawobj42 = pdf2.hvplot(kind='bar', color='g', title='Percent Distribution of Target variable').opts(
)
dmap = hv.DynamicMap((drawobj41+drawobj42).opts(shared_axes=False).opts(title='Histogram and KDE of Target = %s' %dep)).opts(
height=height_size, width=width_size)
dmap.opts(framewise=True,axiswise=True) ## both must be True for your charts to have dynamically varying axes!
hv_all = pn.pane.HoloViews(dmap)#, sizing_mode="stretch_both")
ls_objects.append(drawobj41)
ls_objects.append(drawobj42)
else:
if not isinstance(dep, list):
### it means dep is a string ###
if dep == '':
### there is no target variable to draw ######
return ls_objects
else:
drawobj41 = dfin[dep].hvplot(kind='bar', color='r', title='Histogram of Target variable').opts(
height=height_size,width=width_size,color='lightgreen', xrotation=70)
drawobj42 = dfin[dep].hvplot(kind='kde', color='g', title='KDE Plot of Target variable').opts(
height=height_size,width=width_size,color='lightblue')
dmap = hv.DynamicMap((drawobj41+drawobj42)).opts(title='Histogram and KDE of Target = %s' %dep, width=width_size)
dmap.opts(framewise=True,axiswise=True) ## both must be True for your charts to have dynamically varying axes!
hv_all = pn.pane.HoloViews(dmap)
ls_objects.append(drawobj41)
ls_objects.append(drawobj42)
#### In this case we are using multiple objects in panel ###
##### Save all the chart objects here ##############
if verbose == 2:
imgdata_list = append_panels(hv_all, imgdata_list, chart_format)
image_count += 1
if chart_format.lower() in ['server', 'bokeh_server', 'bokeh-server']:
### If you want it on a server, you use drawobj.show()
#(drawobj41+drawobj42).show()
print('%s can be found in URL below:' %plot_name)
server = pn.serve(hv_all, start=True, show=True)
elif chart_format == 'html':
save_html_data(hv_all, chart_format, plot_name, mk_dir)
else:
### This will display it in a Jupyter Notebook.
display(hv_all)
return ls_objects
#####################################################################################################
def draw_scatters_hv(dfin, nums, chart_format, problem_type,
0
Source : ui.py
with BSD 3-Clause "New" or "Revised" License
from holoviz
with BSD 3-Clause "New" or "Revised" License
from holoviz
def _plot(self, *events):
self._layout.loading = True
y = self.y_multi if 'y_multi' in self._controls.parameters else self.y
if isinstance(y, list) and len(y) == 1:
y = y[0]
kwargs = {}
for p, v in self.param.values().items():
if isinstance(v, Controls):
kwargs.update(v.kwargs)
# Initialize CRS
crs_kwargs = kwargs.pop('crs_kwargs', {})
if 'crs' in kwargs:
if isinstance(kwargs['crs'], type):
kwargs['crs'] = kwargs['crs'](**crs_kwargs)
kwargs['min_height'] = 300
df = self._data
if len(df) > MAX_ROWS and not (self.kind in STATS_KINDS or kwargs.get('rasterize') or kwargs.get('datashade')):
df = df.sample(n=MAX_ROWS)
try:
plot = df.hvplot(
kind=self.kind, x=self.x, y=y, by=self.by, groupby=self.groupby, **kwargs
)
hvplot = pn.pane.HoloViews(
plot, sizing_mode='stretch_width', margin=(0, 20, 0, 20)
).layout
self._layout[1][1] = hvplot
self._alert.visible = False
except Exception as e:
self._alert.param.set_param(
object=f'**Rendering failed with following error**: {e}',
visible=True
)
finally:
self._layout.loading = False
@property
0
Source : test_holoviews.py
with BSD 3-Clause "New" or "Revised" License
from holoviz
with BSD 3-Clause "New" or "Revised" License
from holoviz
def test_holoviews_with_widgets(document, comm):
hmap = hv.HoloMap({(i, chr(65+i)): hv.Curve([i]) for i in range(3)}, kdims=['X', 'Y'])
hv_pane = HoloViews(hmap)
layout = hv_pane.get_root(document, comm)
model = layout.children[0]
assert len(hv_pane.widget_box.objects) == 2
assert hv_pane.widget_box.objects[0].name == 'X'
assert hv_pane.widget_box.objects[1].name == 'Y'
assert hv_pane._models[layout.ref['id']][0] is model
hmap = hv.HoloMap({(i, chr(65+i)): hv.Curve([i]) for i in range(3)}, kdims=['A', 'B'])
hv_pane.object = hmap
assert len(hv_pane.widget_box.objects) == 2
assert hv_pane.widget_box.objects[0].name == 'A'
assert hv_pane.widget_box.objects[1].name == 'B'
@hv_available
0
Source : test_holoviews.py
with BSD 3-Clause "New" or "Revised" License
from holoviz
with BSD 3-Clause "New" or "Revised" License
from holoviz
def test_holoviews_with_widgets_not_shown(document, comm):
hmap = hv.HoloMap({(i, chr(65+i)): hv.Curve([i]) for i in range(3)}, kdims=['X', 'Y'])
hv_pane = HoloViews(hmap, show_widgets=False)
layout_obj = Column(hv_pane, hv_pane.widget_box)
layout = layout_obj.get_root(document, comm)
model = layout.children[0]
assert len(hv_pane.widget_box.objects) == 2
assert hv_pane.widget_box.objects[0].name == 'X'
assert hv_pane.widget_box.objects[1].name == 'Y'
assert hv_pane._models[layout.ref['id']][0] is model
hmap = hv.HoloMap({(i, chr(65+i)): hv.Curve([i]) for i in range(3)}, kdims=['A', 'B'])
hv_pane.object = hmap
assert len(hv_pane.widget_box.objects) == 2
assert hv_pane.widget_box.objects[0].name == 'A'
assert hv_pane.widget_box.objects[1].name == 'B'
@hv_available
0
Source : test_holoviews.py
with BSD 3-Clause "New" or "Revised" License
from holoviz
with BSD 3-Clause "New" or "Revised" License
from holoviz
def test_holoviews_layouts(document, comm):
hmap = hv.HoloMap({(i, chr(65+i)): hv.Curve([i]) for i in range(3)}, kdims=['X', 'Y'])
hv_pane = HoloViews(hmap, backend='bokeh')
layout = hv_pane.layout
model = layout.get_root(document, comm)
for center in (True, False):
for loc in HoloViews.param.widget_location.objects:
hv_pane.param.update(center=center, widget_location=loc)
if center:
if loc.startswith('left'):
assert len(layout) == 4
widgets, hv_obj = layout[0], layout[2]
wmodel, hv_model = model.children[0], model.children[2]
elif loc.startswith('right'):
assert len(layout) == 4
hv_obj, widgets = layout[1], layout[3]
wmodel, hv_model = model.children[3], model.children[1]
elif loc.startswith('top'):
assert len(layout) == 3
col = layout[1]
cmodel = model.children[1]
assert isinstance(col, Column)
widgets, hv_col = col
hv_obj = hv_col[1]
wmodel, hv_model = cmodel.children[0], cmodel.children[1].children[1]
elif loc.startswith('bottom'):
col = layout[1]
cmodel = model.children[1]
assert isinstance(col, Column)
hv_col, widgets = col
hv_obj = hv_col[1]
wmodel, hv_model = cmodel.children[1], cmodel.children[0].children[1]
else:
if loc.startswith('left'):
assert len(layout) == 2
widgets, hv_obj = layout
wmodel, hv_model = model.children
elif loc.startswith('right'):
assert len(layout) == 2
hv_obj, widgets = layout
hv_model, wmodel = model.children
elif loc.startswith('top'):
assert len(layout) == 1
col = layout[0]
cmodel = model.children[0]
assert isinstance(col, Column)
widgets, hv_obj = col
wmodel, hv_model = cmodel.children
elif loc.startswith('bottom'):
assert len(layout) == 1
col = layout[0]
cmodel = model.children[0]
assert isinstance(col, Column)
hv_obj, widgets = col
hv_model, wmodel = cmodel.children
assert hv_pane is hv_obj
assert isinstance(hv_model, Figure)
if loc in ('left', 'right', 'top', 'bottom',
'top_right', 'right_bottom', 'bottom_right',
'left_bottom'):
box = widgets[1]
boxmodel = wmodel.children[1]
else:
box = widgets[0]
boxmodel = wmodel.children[0]
assert hv_pane.widget_box is box
assert isinstance(boxmodel, BkColumn)
assert isinstance(boxmodel.children[0], BkColumn)
assert isinstance(boxmodel.children[0].children[1], BkSlider)
assert isinstance(boxmodel.children[1], BkSelect)
@hv_available
0
Source : test_fast_grid_template.py
with BSD 3-Clause "New" or "Revised" License
from holoviz
with BSD 3-Clause "New" or "Revised" License
from holoviz
def test_app():
app = FastGridTemplate(
title="FastGridTemplate w. Layout Persistence",
site="Panel",
accent_base_color=ACCENT_COLOR,
header_background=ACCENT_COLOR,
# header_color="#000000",
header_accent_base_color="#FFFFFF",
row_height=50,
prevent_collision=True,
# main_layout="",
save_layout=True,
)
app.main[0:7, 0:6] = Markdown(INFO, sizing_mode="stretch_both")
app.main[0:7, 6:12] = HoloViews(_create_hvplot(), sizing_mode="stretch_both")
app.main[7:18, 0:6] = _fast_button_card()
app.main[7:14, 6:12] = HoloViews(_create_hvplot(), sizing_mode="stretch_both")
app.sidebar.extend(_sidebar_items())
return app
if __name__.startswith("bokeh"):
0
Source : test_fast_list_template.py
with BSD 3-Clause "New" or "Revised" License
from holoviz
with BSD 3-Clause "New" or "Revised" License
from holoviz
def test_app():
app = FastListTemplate(
title="FastListTemplate w. #ORSOME colors",
site="Panel",
accent_base_color=ACCENT_COLOR,
header_background=ACCENT_COLOR,
header_accent_base_color="#FFFFFF",
main_layout="",
shadow=True,
)
app.main[:] = [
Markdown(INFO, sizing_mode="stretch_both"),
HoloViews(_create_hvplot(), sizing_mode="stretch_both"),
_fast_button_card(),
HoloViews(_create_hvplot(), sizing_mode="stretch_both"),
]
app.sidebar.extend(_sidebar_items())
return app
if __name__.startswith("bokeh"):
0
Source : test_template.py
with BSD 3-Clause "New" or "Revised" License
from holoviz
with BSD 3-Clause "New" or "Revised" License
from holoviz
def test_template_links_axes(document, comm):
tmplt = Template(template)
p1 = HoloViews(hv.Curve([1, 2, 3]))
p2 = HoloViews(hv.Curve([1, 2, 3]))
p3 = HoloViews(hv.Curve([1, 2, 3]))
row = Row(p2, p3)
tmplt.add_panel('A', p1)
tmplt.add_panel('B', row)
tmplt._init_doc(document, comm, notebook=True)
(_, (m1, _)) = list(p1._models.items())[0]
(_, (m2, _)) = list(p2._models.items())[0]
(_, (m3, _)) = list(p3._models.items())[0]
assert m1.x_range is m2.x_range
assert m1.y_range is m2.y_range
assert m2.x_range is m3.x_range
assert m2.y_range is m3.y_range
def test_template_session_destroy(document, comm):
0
Source : gui.py
with Apache License 2.0
from MannLabs
with Apache License 2.0
from MannLabs
def display_heatmap_spectrum(self, *args):
if self.ms1_ms2_frames or self.ms1_frame:
if self.analysis_software == 'maxquant':
ms1_frame = self.current_frame
ms2_frame = self.ms1_ms2_frames[self.current_frame][0]
mz = float(self.peptides_table.value.iloc[self.peptides_table.selection[0]]['m/z'])
im = float(self.peptides_table.value.iloc[self.peptides_table.selection[0]]['1/K0'])
elif self.analysis_software == 'diann':
ms1_frame = self.ms1_frame
ms2_frame = self.ms2_frame
mz = self.peptide['mz']
im = self.peptide['im']
data_ms1 = self.data.raw_data[ms1_frame].copy()
try:
self.heatmap_ms1_plot = alphaviz.plotting.plot_heatmap(
data_ms1,
mz=mz,
im=im,
x_axis_label=self.heatmap_x_axis.value,
y_axis_label=self.heatmap_y_axis.value,
title=f'MS1 frame(s) #{ms1_frame}',
colormap=self.heatmap_colormap.value,
background_color=self.heatmap_background_color.value,
precursor_size=self.heatmap_precursor_size.value,
precursor_color=self.heatmap_precursor_color.value,
width=570,
height=450,
margin=(0, 10, 10, 0),
)
data_ms2 = self.data.raw_data[ms2_frame].copy()
self.heatmap_ms2_plot = alphaviz.plotting.plot_heatmap(
data_ms2,
x_axis_label=self.heatmap_x_axis.value,
y_axis_label=self.heatmap_y_axis.value,
title=f'MS2 frame(s) #{ms2_frame}',
colormap=self.heatmap_colormap.value,
background_color=self.heatmap_background_color.value,
width=570,
height=450,
margin=(0, 10, 10, 0),
)
self.layout[10][0] = pn.Column(
pn.pane.HoloViews(
self.heatmap_ms1_plot,
margin=(15, 0, 0, 0),
linked_axes=False if self.analysis_software == 'diann' else True,
loading=False
),
self.export_svg_ms1_button,
align='center',
)
self.layout[10][1] = pn.Column(
pn.pane.HoloViews(
self.heatmap_ms2_plot,
margin=(15, 0, 0, 0),
linked_axes=False if self.analysis_software == 'diann' else True,
loading=False
),
self.export_svg_ms2_button,
align='center',
)
except ValueError:
print('The x- and y-axis of the heatmaps should be different.')
if self.analysis_software == 'diann':
if self.x_axis_label_diann.value == 'RT/IM dimension':
self.display_elution_profile_plots()
if self.analysis_software == 'maxquant':
self.layout[9][0] = self.previous_frame
self.layout[9][1] = self.next_frame
self.layout[11] = self.plot_overlapped_frames
self.display_mass_spectrum()
def display_mass_spectrum(self, *args):
0
Source : gui.py
with Apache License 2.0
from MannLabs
with Apache License 2.0
from MannLabs
def display_overlapped_frames(self, *args):
try:
self.layout[10][0][0].loading = True
self.layout[10][1][0].loading = True
self.layout[12].loading = True
except IndexError:
pass
if self.plot_overlapped_frames.value is True:
mz = float(self.peptides_table.value.iloc[self.peptides_table.selection[0]]['m/z'])
im = float(self.peptides_table.value.iloc[self.peptides_table.selection[0]]['1/K0'])
try:
self.heatmap_ms1_plot = alphaviz.plotting.plot_heatmap(
self.data.raw_data[list(self.ms1_ms2_frames.keys())],
mz=mz,
im=im,
x_axis_label=self.heatmap_x_axis.value,
y_axis_label=self.heatmap_y_axis.value,
title=f'MS1 frame(s) #{list(self.ms1_ms2_frames.keys())}',
colormap=self.heatmap_colormap.value,
background_color=self.heatmap_background_color.value,
width=570,
height=450,
margin=(0, 10, 10, 0),
)
self.heatmap_ms2_plot = alphaviz.plotting.plot_heatmap(
self.data.raw_data[[val[0] for val in self.ms1_ms2_frames.values()]],
x_axis_label=self.heatmap_x_axis.value,
y_axis_label=self.heatmap_y_axis.value,
title=f'MS2 frame(s) #{[val[0] for val in self.ms1_ms2_frames.values()]}',
colormap=self.heatmap_colormap.value,
background_color=self.heatmap_background_color.value,
width=570,
height=450,
margin=(0, 10, 10, 0),
)
self.layout[10][0] = pn.Column(
pn.pane.HoloViews(
self.heatmap_ms1_plot,
margin=(15, 0, 0, 0),
linked_axes=False if self.analysis_software == 'diann' else True,
loading=False
),
self.export_svg_ms1_button,
align='center',
)
self.layout[10][1] = pn.Column(
pn.pane.HoloViews(
self.heatmap_ms2_plot,
margin=(15, 0, 0, 0),
linked_axes=False if self.analysis_software == 'diann' else True,
loading=False
),
self.export_svg_ms2_button,
align='center',
)
except ValueError:
print('The x- and y-axis of the heatmaps should be different.')
self.layout[12] = None
else:
self.display_heatmap_spectrum()
def export_svg_ms1(self, *args):