Skip to main content

A configurable features table widget for Napari.

Project description

EPFL Center for Imaging logo

Configurable Features Table for Napari

demo.webm

This plugin is similar to Napari's built-in features table widget, but optimized for usage with 2D and 3D Labels layers. It offers extra options to:

  • Sort table values.
  • Hide or show table columns.
  • Colorize Labels based on feature values, with different color maps.
  • Connect your own callback functions to customize what happens when users click on a table row.
  • Connect your own featurizer functions that run automatically when the data in the Labels changes and update the displayed table.

The content of the table is a graphical view of the features attribute of a Labels layer.

Displaying the table

Open the table from Plugins > Features Table in Napari.

The table displays features from the currently selected layer in the layers list. It will automatically update when the layer selection changes. If multiple layers are selected, only features from the first selected layer will be displayed.

Connecting featurizer functions

By default, the table displays a label column for the selected Labels layer, along with any pre-existing features that can be matched with the label column (they should be in Pandas DataFrame format with at least a 'label' column).

You can customize the behaviour of the plugin to update features automatically when a new Labels layer is selected, or when its data changes, based on a featurizer function that you provide. Featurizer functions will receive as input the labels layer data as a Numpy array, and should return a Pandas DataFrame with at least a label column, along with any other feature columns.

For example, the following code extends the behaviour of the table to display the area (or volume) of objects:

import napari
import pandas as pd
from skimage.measure import regionprops_table
from napari_label_focus import ConfigurableFeaturesTableWidget

# Write an "area" featurizer
def area_featurizer(labels: np.ndarray) -> pd.DataFrame:
    return pd.DataFrame(regionprops_table(labels, properties=["label", "area"]))

if __name__ == "__main__":
    viewer = napari.Viewer()
    widget = ConfigurableFeaturesTableWidget(viewer, featurizer_functs=[area_featurizer])
    viewer.window.add_dock_widget(widget)
    napari.run()

If more than one featurizer function is provided, these functions will be run one by one and the results will be merged into a single features DataFrame.

Controlling what clicking on a table row does

By default, clicking on a table row selects the corresponding label in the Labels layer. This behaviour can be extended by adding callback functions to the table_click_callbacks parameter of the table widget. The callback functions receive a selection context object with references to the viewer, selected layer, selected table row, and the table itself.

For example:

import napari
from napari_label_focus import ConfigurableFeaturesTableWidget, SelectionContext

def print_selection_context(ctx: SelectionContext):
    print(f"Napari viewer: {ctx.viewer}")
    print(f"Selected layer: {ctx.selected_layer}")
    print(f"Selected table row: {ctx.selected_table_idx}")
    print(f"Features table: {ctx.features_table}")

if __name__ == "__main__":
    viewer = napari.Viewer()
    widget = ConfigurableFeaturesTableWidget(viewer, table_click_callbacks=[print_selection_context])
    viewer.window.add_dock_widget(widget)
    napari.run()

In this case, the function print_selection_context gets called whenever users click on a table row.

Installation

You can install napari-label-focus via [pip]:

pip install napari-label-focus

Contributing

Contributions are very welcome.

License

This software is distributed under the terms of the BSD-3 license.

Issues

If you encounter any problems, please file an issue along with a detailed description.

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

napari_label_focus-0.2.2.tar.gz (16.5 kB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

napari_label_focus-0.2.2-py3-none-any.whl (16.6 kB view details)

Uploaded Python 3

File details

Details for the file napari_label_focus-0.2.2.tar.gz.

File metadata

  • Download URL: napari_label_focus-0.2.2.tar.gz
  • Upload date:
  • Size: 16.5 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.2.0 CPython/3.9.25

File hashes

Hashes for napari_label_focus-0.2.2.tar.gz
Algorithm Hash digest
SHA256 e528bed796191e1b912d9bde113c1af6f38100a3f221fbd7a17676b97816c418
MD5 4ba9554a12a78a4e0973f018315a3f8c
BLAKE2b-256 057489f0df99ff5f18557a4f9fc1f0680bb4b809d58f96cdae0854a8b1737f93

See more details on using hashes here.

File details

Details for the file napari_label_focus-0.2.2-py3-none-any.whl.

File metadata

File hashes

Hashes for napari_label_focus-0.2.2-py3-none-any.whl
Algorithm Hash digest
SHA256 aec21b21efa43b7a934a93bd0125b70f5821c56cc84779b8b0db47f62546e83f
MD5 f0415eaff7e5b077d2bca331644104f7
BLAKE2b-256 e9724ed9800e94e49043dd2701f86347899faa30d39e1ad5b7d5c003229ed11c

See more details on using hashes here.

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Pingdom Monitoring Sentry Error logging StatusPage Status page