This page shows how to add panels one by one. Check pre-built Tabs for a quick start, and explore available Panel types.

Adding Tabs

Multiple Tabs are available in the Evidently Cloud and Enterprise.

By default, new Panels appear on a single Dashboard. You can add multiple Tabs to organize them.

User interface. Enter the “Edit” mode on the Dashboard (top right corner) and click the plus sign with “add Tab”. To create a custom Tab, choose an “empty” tab and give it a name.

Python. You can add an empty tab using create_tab:

project.dashboard.create_tab("My tab")
project.save()

You can also use the add_panel method shown below and specify the destination Tab. If there is no Tab with a set name, you will create both a new Tab and Panel at once. If it already exists, a new Panel will appear below others in this Tab.

Adding Panels

You can add Panels in the user interface or using Python API.

User interface

No-code Dashboards are available in the Evidently Cloud and Enterprise.

Once you are inside the Project:

  • Enter the “Edit” mode by clicking on the top right corner of the Dashboard.

  • Click on the “Add panel” button.

  • Follow the flow to configure dashboard name, type, etc.

  • Preview and publish.

To delete/edit a Panel, enter Edit mode and hover over a specific Panel to choose an action.

Python API

Dashboards as code are available in Evidently OSS, Cloud, Enterprise.

You must first connect to Evidently Cloud (or your local workspace) and create a Project.

Import the necessary modules to configure the Panels as code:

from evidently.future.metrics import *
from evidently.ui.dashboards import DashboardPanelCounter
from evidently.ui.dashboards import DashboardPanelDistribution
from evidently.ui.dashboards import DashboardPanelPlot
from evidently.ui.dashboards import DashboardPanelTestSuiteCounter
from evidently.ui.dashboards import DashboardPanelTestSuite
from evidently.ui.dashboards import PanelValue
from evidently.ui.dashboards import PlotType
from evidently.ui.dashboards import TestSuitePanelType
from evidently.ui.dashboards import ReportFilter
from evidently.ui.dashboards import TestFilter
from evidently.ui.dashboards import CounterAgg
from evidently.tests.base_test import TestStatus
from evidently.renderers.html_widgets import WidgetSize

Here is the general flow to add a new Panel:

1

Connect to the Project

Load the latest dashboard configuration into your Python environment.

project = ws.get_project("YOUR PROJECT ID HERE")
2

Add a new Panel

Use the add_panel method and configure the Panel:

  • Pick the Panel type: Counter, Plot, Distribution, Test Counter, Test Plot.

  • Set applicable Panel parameters. (See below for each type).

  • Specify Panel title and size.

  • Add optional Tags to filter data. If empty, the Panel will use data from all Reports.

  • Define what the Panel will show (see examples below):

    • Use values to point a specific Metric result, or

    • Use test_filters to select Tests.

  • Set if the Panel should appear on specific Tab.

For example, to add a line plot that shows Row Count in time to the “Overview” tab:

project.dashboard.add_panel(
        DashboardPanelPlot(
            title="Row count",
            filter=ReportFilter(metadata_values={}, tag_values=[]),
            values=[
                PanelValue(
                    metric_args={"metric.metric_id": RowCount().metric_id},
                    field_path="value",
                    legend="count",
                ),
            ],
            plot_type=PlotType.LINE,
            size=WidgetSize.HALF,
        ),
        tab="Overview"
    )
project.save()

You can add multiple Panels at once: they will appear in the listed order.

3

Save

Save the configuration with project.save(). Go back to the web app to see the Dashboard. Refresh the page if needed.

Delete Panels. To delete all monitoring Panels, use:

project.dashboard.panels = []

project.save()

Note: This does not delete the Reports or data; it only deletes the Panel configuration.

Panel Parameters

General parameters

Class DashboardPanel is a base class. These parameters apply to all Panel types.

ParameterExample useDescription
title: strtitle="My Panel"Panel name visible at the header.
filter: ReportFilterfilter=ReportFilter(metadata_values={}, tag_values=[])Filters define a subset of Reports from which to display the data. Tags or metadata values you list must be added when logging Reports. See docs.
size: WidgetSizesize=WidgetSize.HALF, size=WidgetSize.FULL (default)Sets the Panel size to half-width or full-sized.

Counter

DashboardPanelCounter shows a value count or works as a text-only Panel.

Examples usage:

Text only panel. To create a Panel with the Dashboard title only:

project.dashboard.add_panel(
        DashboardPanelCounter(
            title="LLM chatbot monitoring",
            filter=ReportFilter(metadata_values={}, tag_values=[]),
            agg=CounterAgg.NONE,
            size=WidgetSize.FULL,
        ),
        tab="Overview"
    )
project.save()

All parameters:

ParameterDescription
value: Optional[PanelValue]Specifies the value to display.

You must point to a named Metric and a specific result inside it (value or share/count). Check the Panel Value section below for details.

If left empty, displays a text-only panel.
text: Optional[str]Supporting text to display.
agg: CounterAggData aggregation options:
SUM: Calculates the value sum.
LAST: Shows the last available value.
NONE: Reserved for text panels.

Plot

DashboardPanelPlot shows individual values over time.

panel_line_plot_example

Line chart

PlotType.LINE shows values over time from multiple Reports.

panel_bar_plot_example

Bar chart

PlotType.BAR shows values over time from multiple Report.

Example usage:

Single value. To plot row count as a LINE plot (you can change to BAR etc.):

project.dashboard.add_panel(
        DashboardPanelPlot(
            title="Row count",
            filter=ReportFilter(metadata_values={}, tag_values=[]),
            values=[
                PanelValue(
                    metric_args={"metric.metric_id": RowCount().metric_id},
                    field_path="value",
                    legend="count",
                ),
            ],
            plot_type=PlotType.LINE,
            size=WidgetSize.HALF,
        ),
        tab="Overview"
    )
project.save()

All parameters:

ParameterDescription
values: List[PanelValue]Specifies the value(s) to display in the Plot.

You must point to a named Metric and a specific result inside it (value or share/count). Refer to the Panel Value section below for details.

You can pass multiple values so that will appear together, e.g., as separate lines on a Line plot, bars on a Bar Chart, or points on a Scatter Plot.
plot_type: PlotTypeSpecifies the plot type.

Available: SCATTER, BAR, LINE, HISTOGRAM

Distribution

DashboardPanelDistribution shows changes in the distribution over time. It’s mostly relevant for showing distributions of categorical columns.

panel_dist_stacked_2-min

Stacked

barmode="stack": stacked bar chart shows absolute counts in a single bar.

panel_dist_group_2-min

Grouped

barmode="group": grouped bar chart shows absolute counts in separate bars.

Example. To plot the distribution of the column “refusals” that contains binary labels:

project.dashboard.add_panel(
        DashboardPanelDistribution(
            title="Is the context valid? (group)",
            value=PanelValue(
                field_path="values", 
                metric_args={"metric.metric_id": UniqueValueCount(column="context quality").metric_id}
                ),
            filter=ReportFilter(metadata_values={}, tag_values=[]),
            barmode="group",
            size=WidgetSize.FULL,
        ),
    tab="Overview"
    )
project.save()

All parameters:

ParameterDescription
value: PanelValueSpecifies the distribution to display on the Panel.

You must point to a named Metric that contains a distribution histogram and set field_path="values".
barmode: HistBarModeSpecifies the distribution plot type.

Available: stack, group, overlay, relative

Test Counter

DashboardPanelTestSuiteCounter shows a counter with Test results.

Example usage:

All Tests. To display the results of the latest Test Suite. Filter by LAST, no filter on Test name.

project.dashboard.add_panel(
    DashboardPanelTestSuiteCounter(
        title="Latest Test suite: results",
        agg=CounterAgg.LAST,
    ),
    tab="Overview"
)
project.save()

All parameters:

ParameterDescription
test_filters: List[TestFilter]=[]Test filters select specific Test(s). Without a filter, the Panel considers the results of all Tests.
statuses: List[statuses]

Available:
TestStatus.ERROR, TestStatus.FAIL, TestStatus.SUCCESS(default), TestStatus.WARNING, TestStatus.SKIPPED
Status filters select Tests with specific outcomes. (E.g., choose the FAIL status to display a counter for failed Tests). Without a filter, the Panel shows Tests SUCCESS.

agg: CounterAgg

Available:
SUM(default), LAST
Data aggregation options:
SUM: Calculates the sum of Test results.
LAST: Displays the last available Test result.

Test Plot

DashboardPanelTestSuite shows Test results over time.

panel_tests_detailed_hover_example

Detailed plot

TestSuitePanelType.DETAILED. Individual Test results are visible

panel_tests_aggregated_hover_example

Aggregated plot

TestSuitePanelType.AGGREGATE. Only the total number of Tests by status is visible.

Example usage:

All Tests. Show the results of all Tests in the Project with per-Test granularity.

project.dashboard.add_panel(
    DashboardPanelTestSuite(
        title="All tests: detailed",
        filter=ReportFilter(metadata_values={}, tag_values=[]),
        size=WidgetSize.FULL,
        panel_type=TestSuitePanelType.DETAILED
    ),
    tab="Overview"
)
project.save()

All parameters:

ParameterDescription
test_filters: List[TestFilter]Test filters select specific Test(s). Without a filter, the Panel shows the results of all Tests.
statuses: List[statuses]

Available:
TestStatus.ERROR, TestStatus.FAIL, TestStatus.SUCCESS, TestStatus.WARNING, TestStatus.SKIPPED
Status filters select Tests with specific outcomes. By default the Panel shows all Test statuses.
panel_type=TestSuitePanelType

Available:
TestSuitePanelType.DETAILED
TestSuitePanelType.AGGREGATE
Defines the Panel type. Detailed shows individual Test results where you can hover and see individual results and click to open a corresponding Test Suite. Aggregate (default) shows the total number of Tests by status.
time_agg: Optional[str] = None

Available:
1H, 1D, 1W, 1M (see period aliases)
Groups all Test results in a period (e.g., 1 DAY).

Panel Value

Metric ID. To point to the Metric or Test to plot on a Panel, you use test_filters or metric_args as shown above and pass metric_id or metric_fingerprint . They must include the name of the Metric that was logged to the Project. You must use the same Metic name (with any applicable parameters) that you used when creating the Report.

Working with Presets. You must reference a named Evidently Metric even if you used a Preset. You can check the Metrics included in each Preset here.

Field path. For Metric Panels, you also specify the field_path. This helps point to a specific result inside the Metric. This can take the following values: value , share/count or values .

Field pathDescriptionApplicable MetricsApplicable Panels
valuePoints to a single result from the Metric.Most MetricsCounter, Plot
share or countPoints to either absolute count or percentage value.Metrics that return both absolute and percentage values like MissingValueCountCounter, Plot
valuesPoints to a histogram visualization within a Metric.Metrics with histogram visualizations, like UniqueValueCount.Distribution

There are a few exceptions where a Metric can return a different result or a dictionary.

How to verify the result of a specific Metric? Check in the All Metrics table. You can also generate the Report with a given Metric, export the Report as JSON and check the value name it returns.

When working in the Evidently Cloud, you can see available fields in the drop-down menu as you add a new Panel.