Feature plots

The featureplot module provides flexible visualization options for comparing quantitative features across experimental conditions. Feature plots support both box plots and violin plots, with optional scatter point overlays, statistical significance testing, and flexible grouping layouts.

See the API reference for full signatures and parameter documentation.

Examples

Basic Box Plot

Create a standard box plot with scatter points and statistical significance marks:

from omero_screen_plots import feature_plot
import pandas as pd

df = pd.read_csv("data.csv")
fig, ax = feature_plot(
    df=df,
    feature="intensity_mean_p21_nucleus",
    conditions=['control', 'cond01', 'cond02', 'cond03'],
    condition_col="condition",
    selector_col="cell_line",
    selector_val="MCF10A",
    title="feature plot basic",
    fig_size=(5, 5),
    save=True,
    file_format="svg"
)

Basic Box Plot

Grouped Layout

Group conditions for better visual organization and within-group statistical comparisons:

fig, ax = feature_plot(
    df=df,
    feature="intensity_mean_p21_nucleus",
    conditions=['control', 'cond01', 'cond02', 'cond03'],
    condition_col="condition",
    selector_col="cell_line",
    selector_val="MCF10A",
    title="feature plot grouped",
    group_size=2,
    within_group_spacing=0.2,
    between_group_gap=0.5,
    fig_size=(6, 4)
)

Grouped Layout

Violin Plots

Use violin plots to show the full distribution of your data:

fig, ax = feature_plot(
    df=df,
    feature="intensity_mean_p21_nucleus",
    conditions=['control', 'cond01', 'cond02', 'cond03'],
    condition_col="condition",
    selector_col="cell_line",
    selector_val="MCF10A",
    title="feature plot violin",
    violin=True,
    ymax=20000,
    fig_size=(5, 5)
)

Violin Plots

Clean Violin Plots

Remove scatter points for cleaner visualization with custom y-axis limits:

fig, ax = feature_plot(
    df=df,
    feature="intensity_mean_p21_nucleus",
    conditions=['control', 'cond01', 'cond02', 'cond03'],
    condition_col="condition",
    selector_col="cell_line",
    selector_val="MCF10A",
    title="feature plot no scatter",
    violin=True,
    show_scatter=False,
    ymax=(2000, 12000),
    group_size=2,
    fig_size=(5, 5)
)

Clean Violin Plots

Combined Subplot Analysis

Create multi-panel figures comparing different features:

import matplotlib.pyplot as plt
from omero_screen_plots.utils import save_fig

fig, axes = plt.subplots(2, 1, figsize=(2, 4))
fig.suptitle("feature plot comparison", fontsize=8, weight="bold")

# First subplot - p21 intensity
feature_plot(
    df=df,
    feature="intensity_mean_p21_nucleus",
    conditions=['control', 'cond01', 'cond02', 'cond03'],
    condition_col="condition",
    selector_col="cell_line",
    selector_val="MCF10A",
    axes=axes[0],
    group_size=2,
    x_label=False,
)
axes[0].set_title("mean nuc. p21 intensity", fontsize=7)

# Second subplot - cell area
feature_plot(
    df=df,
    feature="area_cell",
    conditions=['control', 'cond01', 'cond02', 'cond03'],
    condition_col="condition",
    selector_col="cell_line",
    selector_val="MCF10A",
    violin=True,
    show_scatter=False,
    ymax=10000,
    axes=axes[1],
    group_size=2,
)
axes[1].set_title("area cell", fontsize=7)

save_fig(fig, "output/", "feature_comparison", fig_extension="svg")

Combined Subplot Analysis