Results & graphs

Results & graphs

Graphs

Modes in this group produce graphs from tables on their input by visualizing a feature values or a relation of two or more features. Features are typically columns and values are spread across rows.

The graphs are interactive as they can:

  • synchronize with current frame (or loop) position
  • synchronize object selection,
  • select different features displayed,
  • zoom and pan the graph area,
  • show data information.

Row filtering

In the simplest case the graph shows the all it’s data rows in the graph. This happens on single frame dataset or when all the data is accumulated and displayed at once (e.g. frame measurement for all frames). Otherwise, if a subset of rows should be displayed it must be define in the data page. Typically it is the “Current frame” option (e.g. object features displayed for objects from current frame only). For other cases it may be “Current Z-slice”, “Current time” or other.

The selection can be let to the user to chose if more than one make sense. It can also change when such a selection changes in another result (check synchronize on receiving end).

Control dialog

The control dialog settings share many common settings.

Node UI
Node's control dialog - General

  • Title displayed above the graph.
  • Legend selects the visibility and place of the legend.

Node UI
Node's control dialog - Data

  • Table rows filters the data rows based on selected frame (current plate, z-stack, time …).
  • Table columns defines which features are shown on which axis; starts denotes visible feature by default; selections reveals more display options per feature that can override default behavior.
Column selection set to <auto> improves behavior when the node is reconnected or measured intensity features change due to different channels on different image.

Node UI
Node's control dialog - Interaction

  • Layout tab modifies name (tooltip) and icon in stacked layout.
  • Table rows dropdown lets the user select the table rows filter interactively.
  • Table columns dropdown lets the user select features from the dropdown.
  • Various options sets the state of the feature and it’s visibility (e.g. Autoscale ON/OFF and if the button is shown).
  • Tools sets the availability of interaction tools on the toolbar.

Node UI
Node's control dialog - Numerical axis

  • Axis label visibility and custom text for the axis,
  • Labels formatting options,
  • Range of the axis, linear/logarithmic, reversed and
  • Tics and gridline definition.

Barchart

2D/3D

Barchart visualizes one or more features on Y axis (left and right) versus categorical X-axis. It can also operate on grouped recordsets, where the grouping becomes a 3rd nesting level.

Specific control dialog

Node UI
Node's control dialog - General

  • Categorical factors defines how the nesting and display on the axis; thew grouping and bar padding.
  • Annotations can be checked to show the feature value.

This is the visualization of the above settings:

Resulting graph
Resulting graph

Parameters
Input
  • A (Table)
Output
  • R (Table)
Control
  • json (Text)

See also: Graphs (group)

Colormap

2D/3D

Colormap visualizes a feature values in a matrix using colors.

Specific control dialog

Node UI
Node's control dialog - General

  • Palette specifies the color map.
  • Background specifies the color for values not set.
  • Annotations can be checked to show the feature value.

Node UI
Node's control dialog - Data

  • Table columns is simplified as only one feature can be selected.
  • Table columns dropdown lets the user select features from the dropdown.

This is the visualization of the above settings:

Resulting graph
Resulting graph

Parameters
Input
  • A (Table)
Output
  • R (Table)
Control
  • json (Text)

See also: Graphs (group)

Fitplot

2D/3D

A graph where a fit equation and source datapoints with error-bars are plotted. It requires an output of one of the fit nodes:

The fitplot has limited settings.

Resulting graph
Resulting graph

Parameters
Input
  • A (Table)
Output
  • R (Table)
Control
  • json (Text)

See also: Graphs (group)

Histogram

2D/3D

A graph where one feature’s frequency is plotted.

Specific control dialog

Node UI
Node's control dialog - General

  • For numerical features the frequencies are calculated using specified number of equal bins from minimum to maximum.
  • Categorical features show frequency per value (ordered alphabetically) and can be rearranged by specifying the values.

This is the visualization of the above settings:

Resulting graph
Resulting graph - Numerical
Resulting graph
Resulting graph - Categorical
Parameters
Input
  • A (Table)
Output
  • R (Table)
Control
  • json (Text)

See also: Graphs (group)

Linechart

2D/3D

A graph where one numeric feature is provided for x-axis and another for y-axis and another one for right y-axis. The data is sorted by x-axis feature. When the data is grouped it draws one line per group while cycling the colors.

Specific control dialog

Node UI
Node's control dialog - General

  • Palettes & markers defines the colors and if the color or markers are used for grouped data or columns.
Use Object/Track/Channels colormap to see the data colored the same way as the plotted entities.

This is the visualization of the above settings:

Resulting graph
Resulting graph

Parameters
Input
  • A (Table)
Output
  • R (Table)
Control
  • json (Text)

See also: Graphs (group)

Scatterplot

2D/3D

Scatterplot where one numeric feature is defined for x-axis and one or more numeric features for Y axis. Grouped records use different color.

Specific control dialog

Node UI
Node's control dialog - General
Node UI
Node's control dialog - Data

This is the visualization of the above settings showing tracks relative to their origin:

Resulting graph
Resulting graph

Parameters
Input
  • A (Table)
Output
  • R (Table)
Control
  • json (Text)

See also: Graphs (group)

Scatterplot 4D

2D/3D

Scatterplot where a numeric feature is selected for every dimension x-axis, y-axis, color and dot size.

Specific control dialog

Node UI
Node's control dialog - Data
Node UI
Node's control dialog - Color axis

This is the visualization of the above settings:

Resulting graph
Resulting graph

Parameters
Input
  • A (Table)
Output
  • R (Table)
Control
  • json (Text)

See also: Graphs (group)

Matplotlib

2D/3D
Advanced

Use python’s matplotlib (MPL) to create any graph from the library. See MPL workflows at Matplotlib for data visualization or MPL gallery.

MPL Dialog

import pandas as pd
import numpy as np
from matplotlib.figure import Figure

# predefined globals:
# df: pd.DataFrame with the input table of input "a"
# mdf: pd.DataFrame with the input column metadata table of input "a"
# fig: Figure to be filled by this node
# axis_secs_to_HM(axis, major_secs=3600, minor_secs=None)
# style_figure(fig, icon: str = "") - set colors to the figure to match NIS colors

# generated data
x = [ 3600*i for i in range(10) ]
y = [ i**2 for i in range(10) ]

# plot the graph
fig = Figure(figsize=(12, 4))
ax = fig.add_subplot(1, 1, 1)
ax.plot(x, y, marker='o', linewidth=2)
ax.set_title("Object Count vs Time")
ax.set_xlabel("Time (hh:mm:ss)")
ax.set_ylabel("Count")
ax.grid(True)

# formats time axis from seconds to HH:MM
axis_secs_to_HM(ax.xaxis)

# set colors to the figure to match NIS light/dark colors
style_figure(fig)

The above python code produces following line chart.

MPL Graph light
Line chart by matplotlib in the light scheme
MPL Graph dark
Line chart by matplotlib in the dark scheme

The node produces a graph every time it is called. This is typically on every frame unless the input A is accumulated (see the guide). The display will correctly show the appropriate graph for the current frame or loop index. However, when used in reports only the first graph will be rendered as it expects single graph. In this case accumulate the input table and make subplots.

Accessing columns in pandas dataframe
To see how to make column access more robust for later editing, see the Create Column
Helper functions and variables

Below are global variables and functions available to the user code.

# used in figure rendering
# may be modified in the script
savefig_kwargs: dict = {
    'format': 'png',
    'bbox_inches': 'tight',
    'pad_inches': 0.25
}

# defualt color cycler
datacolors_light9 = [ ... ]

# color cycler for object IDs
datacolors_objects = [ ... ]

# color cycler for track IDs
datacolors_tracks = [ ... ]

datacolors = datacolors_light9
plt.rcParams['axes.prop_cycle'] = cycler(color=datacolors)

# converts seconds into HH:MM with optional major and minor tick period
def axis_secs_to_HM(axis, major_secs=3600, minor_secs=None):
    ...

def set_color_cycler_default(ax):
    ax.set_prop_cycle(cycler(color=datacolors))

def set_color_cycler_objects(ax):
    ax.set_prop_cycle(cycler(color=datacolors_objects))

def set_color_cycler_tracks(ax):
    ax.set_prop_cycle(cycler(color=datacolors_tracks))

# styles the figure so that it uses light/dark NIS scheme
# icon is one of "histo", "line" and "scatter"
def style_figure(fig, icon: str = ""):
    ...
Use LLMs with Python nodes

It is possible to ask large language models (LLMs) like ChatGPT, Gemini or Copilot to generate python code that will render the graph. To simplify the interaction with the LLMs there is a button Copy prompt for a LLM which prepares a prompt ready to be pasted into the LLMs. The user has to replace the <USER TASK HERE>. At the end of the prompt:

Task (provided by the user):
ENTER YOUR QUESTION HERE

Note that it is a good practice to create a new chat for the prompt so that it doesn’t share context with unrelated conversation.

Copy and paste the python code – replace it: Ctrl+A, Ctrl+V

Example of a Scatterplot with confidence interval (movie)
In the movie we show how to interact with the LLMs.
Example of a Histogram with a Gaussian fit
When the following question is added to the generated prompt:

Task (provided by the user):
Plot a histogram (PDF) of circularity in 20 bins.
Overlay it with a fitted gaussian curve with mean and stdev in the legend.

The ChatGPT 4o outputs code that produced following graph:

MPL Graph light
Histogram with Gaussian Fit

Example of a 3D scatterplot
When the following question is added to the generated prompt:

Task (provided by the user):
Plot Bin shape factor vs. Circularity vs. Area into 3D scatterplot.

The ChatGPT 4o outputs code that produced following graph:

MPL Graph light
3D scatterplot

Example of a Pie chart
When the following question is added to the generated prompt:

Task (provided by the user):
Create a Pie chart of the Class column.

The ChatGPT 4o outputs code that produced following graph:

MPL Graph light
Pie chart

Example of a per-well scatterplot
When the following question is added to the generated prompt:

Task (provided by the user):
Per-well scatterplot: LiveFillArea vs LiveMeanOfBF

The generated code can produce following graph:

Per-well scatter light
Per-well scatter example (light)

Parameters
Input
  • A (Table)
Output
  • R (Table)
Control
  • twoGraphs (Number)

  • code (Text)

  • columnCache (Text)

See also: Graphs (group), Matplotlib for data visualization

Layout

Nodes in layout are used for nice presentation of the results around the image. All nodes in this group are used together. Horizontal and stacked layouts are inputs to the Display node.

Display

2D/3D

Display is the node that defines how the results layout with the image in NIS-Express main window. If not present (or not selected for preview) all results are stacked below the image. When there is more than than one result (e.g. a table and graph) it makes sense to include the display and Stacked layouts.

Depending on how inputs are connected some or all quadrants are used.

1+1 1+2 2x2

It has three inputs:

  • Left (mandatory) that is the main one below the image.
  • Right (optional) that splits the main bottom pane below the image in two parts left and right.
  • Side (optional) that occupies the space besides the image.
  • Report (optional) allows for a HTML Report to be shown on a button.

Only Stacked Layout and Horizontal Layout can be connected to the first three inputs.

Parameters
Input
  • A (Table, Optional)

  • B (Table, Optional)

  • C (Table, Optional)

  • D (Table, Optional)

Output
  • R (Table)
Control
  • showNotes (Number)

  • notesText (Text)

See also: Layout (group), Presentation of results

Horizontal

2D/3D

Horizontal layout is an input to the Display node. It allows for further division of the space in the panes (typically Left and Right).

It can take following nodes as input:

and the output should be connected either to Display node.

Parameters
Input
  • A, B, … (Table, Multiple)
Output
  • R (Table)
Control
  • json (Text)

See also: Layout (group)

Stacked

2D/3D

Stack layout is an input to the Display node. It allows for results to be stack one above the other in a pane.

It can take following nodes as input:

and the output should be connected either to Horizontal layout or to Display node.

Parameters
Input
  • A, B, … (Table, Multiple)
Output
  • R (Table)
Control
  • json (Text)

See also: Layout (group)

Wellplate

The graphs in this group are schematic as they are displayed in a wellplate-like grid to provide an overview of the data. The wellplate supports navigation over wells.

In case there are more dimensions like z-stack or time-lapse the settings define if the data shown on wellplate are per whole file or per each slice in z-stack or time-lapse.

All nodes below must be connected to a table that contains Well feature coming from Wellplate metadata measurement node.

Control dialog

All graphs in this group share a very similar control dialog. It is similar to the Graphs above.

This dialog is for Bars graph, other may have few options more or less.

Node UI
Node's control dialog - General

  • Title displayed above the wellplate,
  • Data range fixed minimum and maximum for all wells and logarithmic display,

Node UI
Node's control dialog - Data

  • Table rows filters the data rows based on selected frame (current plate, z-stack, time …).
  • Table columns one or more features (depending on the graph type) that are displayed.

Node UI
Node's control dialog - Interaction

  • Layout tab modifies name (tooltip) and icon in stacked layout.
  • Table rows lets the user select the filter interactively.
  • Table columns dropdown lets the user change the features. Show, Hide are regular expressions to alter the list of features visible to the user. First show then hide is evaluated on every column. A partial match is sufficient on column name. For example “Concentration|Ratio” (where | is or) in the hide removes “Concentration” and “LiveRatio” columns.

Bars

2D/3D

Simplified bar chart in each well on a wellplate.

Resulting graph
Resulting graph

Parameters
Input
  • A (Table)
Output
  • R (Table)
Control
  • json (Text)

See also: Wellplate (group)

Barstack

2D/3D

Simplified stacked bar chart in each well on a wellplate.

Resulting graph
Resulting graph

Parameters
Input
  • A (Table)
Output
  • R (Table)
Control
  • json (Text)

See also: Wellplate (group)

Boxplot

2D/3D

Simplified box plot. The node requires “boxplot” aggregated values per-well. Useful for showing cell feature box plot statistics on wellplate.

Resulting graph
Resulting graph

Parameters
Input
  • A (Table)
Output
  • R (Table)
Control
  • json (Text)

See also: Aggregate Records, Reduce Records, Wellplate (group)

Dosing

2D/3D

Overview of wellplate dosing and control.

Resulting graph
Resulting graph

Parameters
Input
  • A (Table)
Output
  • R (Table)
Control
  • json (Text)

See also: Wellplate (group)

Heatmap

2D/3D

Overview of a feature value in each well on a wellplate using heatmap.

Resulting graph
Resulting graph

Parameters
Input
  • A (Table)
Output
  • R (Table)
Control
  • json (Text)

See also: Wellplate (group)

Image

2D/3D

Overview of well thumbnails on a wellplate.

Resulting graph
Resulting graph - Image only
Resulting graph
Resulting graph - Image with binaries
Parameters
Input
  • A (Table)
Output
  • R (Table)
Control
  • json (Text)

See also: Wellplate (group)

Labeling

2D/3D

Overview of wellplate labels.

Resulting graph
Resulting graph

Parameters
Input
  • A (Table)
Output
  • R (Table)
Control
  • json (Text)

See also: Wellplate (group)

Linechart

2D/3D

Simplified line chart provides an overview of feature’s trend in every well on a wellplate.

Resulting graph
Resulting graph

Parameters
Input
  • A (Table)
Output
  • R (Table)
Control
  • json (Text)

See also: Wellplate (group)

Violin

2D/3D

Simplified violin plot (similar to boxplot). The node requires “violin” aggregated values per-well. Useful for showing cell feature box plot statistics on wellplate.

Resulting graph
Resulting graph

Parameters
Input
  • A (Table)
Output
  • R (Table)
Control
  • json (Text)

See also: Aggregate Records, Reduce Records, Wellplate (group)

Tables

Summary

2D/3D

Presents the data in a synthetic form. The source table is transposed so that the column names are displayed to the left in bold and the row data (typically one or two) follow to the right.

Resulting table
Resulting table

Parameters
Input
  • A (Table)
Output
  • R (Table)
Control
  • json (Text)

Table

2D/3D

The node shows the input table as an interactive grid.

Control dialog

Table dialog - General

  • Title: table pane title.
  • Show row index column.
  • Enable sorting: allows sorting rows by clicking column headers. Click the same header again to switch ascending/descending order.
  • Enable resizing: allows changing column widths by dragging separators between column headers.

Table dialog - Data

  • Display: default row visibility mode.

Table dialog - Interaction

  • Layouts tab / Name.
  • Table rows dropdown / Options.
  • Synchronize in layouts.
  • Statistics defaults and toggle visibility.
  • Selections: enable row selection and selection mode.

Result view

Resulting table

Toolbar options

  • Show data for: limits rows to current frame/plate/well/point/time/Z/file.
  • Auto-size: fits column widths to content.
  • Statistics: shows/hides statistics rows.
  • Export: copy to clipboard or save as CSV/Excel.

Selection

  • Selection is active only when selection is enabled and the input table type supports it.
  • Click a row: select that row.
  • Ctrl + click: toggle that row in selection.
  • Shift + click: select range from anchor row.
  • Selection is synchronized with other result panes when applicable.
  • Arrow Up / Arrow Down: move focused row.
  • Space: select focused row.
  • Shift + Arrow Up/Down: extend selection range from focused row.
  • Ctrl + Shift + Arrow Up/Down: extend/toggle range additively.
  • Ctrl + Space: toggle focused row.

Grouping

  • Grouping is available only when input data are grouped.
  • Groups can be expanded/collapsed in the result view.
  • Arrow Right on current group: expand group.
  • Arrow Left on current group: collapse group.
  • Enter or Space on current group: toggle group.
  • Shift + click on a group row: expand/collapse all groups from that depth downward.
Parameters
Input
  • A (Table)
Output
  • R (Table)
Control
  • json (Text)

Cross Table

2D/3D

Cross Table works like Table, but adds dynamic pivoting.

In this example, the table is pivoted by RoiId, so ROI values that were in rows are transformed into separate columns.

Cross table pivot dialog

Pivot settings:

  • pick one column as the pivot column,
  • values from that column are turned into new columns,
  • other data are rearranged into a cross-table layout.

Pivot direction controls the order of generated columns:

  • Grouped: grouped by original column first, then by pivot value,
  • Interleaved: grouped by pivot value first, then by original column.

You can also control generated column names using a format template.

BEFORE pivoting

Cross table before pivot

AFTER pivoting

Cross table result

Example use: Cross-Tab pivoted table.

Parameters
Input
  • A (Table)
Output
  • R (Table)
Control
  • json (Text)

Table with Stats

2D/3D

Combines two tables one has the “ordinary” data and the other one has statistics. Both tables are combined by columns IDs. The statistics table may provide a column called “Statistics” with titles.

Resulting table
Resulting table

Parameters
Input
  • A (Table)

  • B (Table)

Output
  • R (Table)
Control
  • json (Text)

Image

Object Catalog

2D/3D

Displays segmented objects as an interactive gallery (table of image tiles). The input table must contain:

  • an object ID column (_ObjId or _ObjId3d), and
  • an image/thumbnail column (WellThumbnail or Image) with rendered object data.

In a typical workflow, the input is produced by Render Objects.

Control dialog

Object catalog dialog - General

  • Title: custom title shown above the catalog.

Object catalog dialog - Data

  • Display: default row visibility mode.

Object catalog dialog - Interaction

  • Layouts tab / Name.
  • Table rows dropdown / Options.
  • Synchronize in layouts.
  • Toolbar visibility/default options for scales, IDs, size, labels, sorting and same scale.

Result view

Object catalog

  • Click: select one object.
  • Ctrl + click: add/remove object from selection.
  • Shift + click: range selection.
  • Double click: highlights the object in the image view (when available).
  • Selection is synchronized with other results using object selection.

Toolbar and dropdown options

  • Show scales: toggles scale bar rendering.
  • Show binary IDs: overlays object IDs directly in tiles.
  • Cell size: changes tile size (Small to Big).
  • Shown feature: selects a column rendered as a label overlay in the lower-left corner of each cell.
  • Color by: colors binary overlays by a selected categorical column (if available).
  • Sort by column: sorts tiles by selected column, ascending/descending.
  • Same scale: normalizes tile dimensions to common scale for size comparison.
  • Export PNG: exports current catalog rendering (download or clipboard).
Parameters
Input
  • A (Table)
Output
  • R (Table)
Control
  • json (Text)

See also: Object count workflow, Render Objects

Frame

2D/3D

Displays a rendered image frame in layout.

Use this node with Render Frame, which prepares the frame preview (image and optional binary overlays) for display.

Input requirements

Input table should contain rendered frame data created by Render Frame.

Frame result

Result view behavior

  • Shows one frame view in the layout pane.
  • Supports binary overlays on top of the image.
  • The main interaction is selecting which binary overlays are visible.

Node settings

General

  • Title: custom title shown above the frame view.

Data

  • Display: row visibility mode used in the result view (All, Current frame, Current well, etc.).

Interaction

  • Layouts tab / Name: custom tab name in layouts.
  • Table rows dropdown / Options: row-visibility options available in the result toolbar.
  • Synchronize in layouts: share the selected row-visibility mode across synchronized layout panes.
Parameters
Input
  • A (Table)
Output
  • R (Table)
Control
  • json (Text)

See also: Render Frame

Reports

Report

2D/3D

The node builds a report by placing elements on an HTML page canvas.

It is separate from HTML Report: Report is a visual layout editor, while HTML Report is a template-based report node.

You drag and drop elements onto the canvas, connect input elements to source data, and the final report renders those connected elements in the result.

Report dialog

Top toolbar

  • Page: move between report pages and set current page number.
  • Paper size: switch page format (A4, Letter, Legal, A5, A6).
  • Orientation: portrait or landscape.
  • Save / Load: export the report template to HTML, or import a saved report HTML template.
  • Clear: remove all elements from the current report layout.
  • Refresh: update the report preview.

Left element palette

  • Input image: places an image placeholder filled from connected image-type input.
  • Input table: places a table placeholder filled from connected table input.
  • Input graph: places a graph placeholder filled from connected graph input.
  • Input HTML: places HTML content placeholder from connected HTML input.
  • Static text: fixed text label.
  • Edit box: text area intended for user-entered text.
  • Image: image loaded from file.
  • Date/time: current date, time, or datetime placeholder.
  • User: current user name placeholder.
  • Grid/table layout: inserts a grid-style layout container that can hold other report elements.

Adding an input-type element in the editor (for example input image, input table, or input graph) defines which input data the report expects.

Editing on canvas

  • Drag an item from the palette onto the page to add it.
  • Move and resize placed items directly on the page.
  • Right-click an item to choose its source (for example which table/graph/image) and item-specific options.
  • Input-bound elements (table, graph, image, HTML, values) render from connected data in the result.

Generate report:

Use the export button in the dialog to export the generated report to PDF.

Report result

Node settings

  • htmlCode: serialized report content used by the node output.
Parameters
Input
Output
  • R (Table)
Control
  • htmlCode (Text)

HTML Report

2D/3D
Advanced

Build a final static HTML report from connected inputs (A, B, C, …) using a Jinja template with optional Python and CSS customization.

General usage

What each part is for:

  • Template (source): Main report structure (Jinja + HTML).
  • Python (python): Optional helper logic executed before rendering.
  • CSS (css): Optional styling for the final report.
  • Inputs (A, B, …): Available in template as lowercase variables (a, b, …).

Template basics:

  • {{ a }} or {{ a | print }} renders input a
  • {{ a | pane(i) }} selects pane index i (0-based)
  • {{ a | pane(i) | item(j) }} selects item j within pane i
  • {{ NOTES }} inserts user notes

Starter template:

<h1>Report</h1>

{% if NOTES is defined %}
  <h2>Notes</h2>
  {{ NOTES }}
{% endif %}

<h2>Main Output</h2>
{% if a is defined %}
  {{ a | print }}
{% else %}
  <p>Input A is not connected.</p>
{% endif %}

Practical tips:

  • Guard missing inputs (if a is defined).
  • Guard empty lists before using min/max.
  • Prefer column IDs over visible titles in show/hide/filter.
  • For an exclusive column set, use hide='.*' with explicit show=[...].
  • Build templates incrementally: a -> a | print -> add filters/loops.

AI-assisted template generation

Recommended AI workflow:

  1. Click Copy prompt for LLM in the node.
  2. Paste into your LLM tool.
  3. Describe the desired report sections and required data.
  4. Paste generated Jinja back into the template field.
  5. Run and iterate.
Parameters
Input
  • A, B, … (Table, Multiple)
Output
  • R (Table)
Control
  • sourceType (Text)

  • source (Text)

  • python (Text)

  • css (Text)