Skip to main content
Ionworks Studio has three ways to plot your battery data in the browser:
  • The data viewer explores one measurement in depth, with flexible cycle and step filters.
  • The plot drawer plots several measurements together, across cells and specifications.
  • Dashboards keep a page of live plots over a project’s data, built by you or by the dashboard agent.
For plotting from Python, see reading data — plotting from Python.

Accessing the data viewer

To view measurement data:
  1. Navigate to your Cell Specification
  2. Select a Cell Instance
  3. Click on a Cell Measurement
  4. The measurement detail view opens with visualization tools

Visualization tabs

The data viewer has tabs for different analysis perspectives:

Time series tab

The time series view shows high-resolution measurement data over time (or other x-axis variables).

Axis selection

Use the dropdown menus to select which variables to plot on the x-axis and y-axis. Available options depend on the columns present in your measurement data. A derived Power [W] column (voltage × current) appears in the axis dropdown for any time-series measurement that carries both Voltage [V] and Current [A], even when the source data did not include a power column — Ionworks computes it when the measurement is processed and stores it alongside the other channels. A measurement missing either source column gets no power column. Select it like any other variable to plot power over time or against another signal.

Secondary y-axis

Optionally add a secondary y-axis to overlay two variables on the same plot. Select “None” to disable.
The secondary y-axis is disabled when “Stack cycles” mode is active.

Overlaying multiple series with the same unit

Both the left and right y-axes accept multiple variables, as long as the additional variables share the same unit as the primary variable on that axis. This is useful for direct visual comparison of related signals — for example, plotting Voltage [V] together with Anode potential [V] and Cathode potential [V] on the same axis. To overlay additional series:
  1. Pick the primary variable for the axis (left or right) as usual.
  2. Click Add series with same unit under that axis.
  3. Use the new dropdown to choose any other variable with a matching unit.
  4. Repeat to stack more series, or click the × button next to a series to remove it.
Each additional series is drawn with its own color so individual traces remain distinguishable. The Add series with same unit button only appears when at least one other available variable shares the primary variable’s unit; changing the primary variable to a different unit automatically clears the extra series on that axis.

Stack cycles mode

Enable Stack cycles to overlay all cycles on top of each other by resetting the x-axis to zero at the start of each cycle. This is useful for:
  • Comparing cycle-to-cycle variations
  • Identifying degradation patterns
  • Visualizing capacity fade
When enabled, cycles are color-coded from blue (early cycles) to yellow (late cycles) using a colorblind-safe palette.

Show step data

Enable Show step data to display detailed step information in hover tooltips. The tooltip shows:
  • Cycle and step numbers
  • Step metrics (duration, capacity, voltage stats)
  • SQL column names for use in filters
Use “Show step data” to discover the column names you need for SQL filtering. The hover tooltip displays the exact column names used in filter queries.

EIS tab

When your measurement contains impedance data (Z_Re [Ohm], Z_Im [Ohm], and Frequency [Hz] columns), an EIS tab appears automatically. This tab displays a Nyquist plot with Z_Re [Ohm] on the x-axis and -Z_Im [Ohm] on the y-axis. If your data contains multiple steps, each step is plotted as a separate trace with its own color. You can use the step filter to select which steps to display.

Differential tab

The Differential tab shows derivative curves computed from the measurement’s voltage and capacity data. It’s the standard view for incremental capacity analysis (ICA) and differential voltage analysis (DVA) — techniques used to identify electrode phase transitions, quantify loss of active material, and diagnose degradation modes. The tab appears automatically for any time_series measurement that has Voltage [V], Cycle count, and a supported capacity column (Charge capacity [A.h] + Discharge capacity [A.h], Net capacity [A.h], or Capacity [A.h]). You can switch between two curve types using the toggle at the top of the tab: Each cycle in the measurement is plotted as its own trace so you can track how peaks shift over cycling. Use the half-cycle control to compare charge and discharge data, and the cycle filter to compare early- and late-life behavior on the same axes.
Pair the Differential tab with the weighted point-cloud dQ/dV objective when fitting a model — matching peak positions is often a more sensitive target than matching the raw V–Q curve.

Cycles tab

The cycles view shows aggregated metrics per cycle, ideal for tracking degradation and performance trends.

Available cycle metrics

Relative / retention mode

For capacity and energy metrics, enable Show relative to display values as a fraction of a reference cycle:
  1. Check “Show relative”
  2. Enter the reference cycle number (e.g., cycle 1 or cycle 10)
  3. Values are shown as value / reference_value
This is useful for visualizing capacity retention curves (e.g., 80% retention after 500 cycles).

Filtering data

The measurement viewer provides multiple filtering methods to focus on specific portions of your data.

Cycle filter

Filter which cycles are displayed using several input methods:
Enter a custom filter expression using Python slice-like syntax:
  • Single cycles: 1, 5, 10, 20
  • Range: 0:50 (cycles 0 through 50)
  • Negative indexing: -10:-1 (last 10 cycles)
  • Combined: 0:10, 50, 100:110
Quickly select the first N cycles. Enter the count and the filter automatically generates.
Select the last N cycles from your dataset.
Define a range with optional sampling:
  • Min: Starting cycle (default: 0)
  • Max: Ending cycle (default: last cycle)
  • Step: Sample every Nth cycle (e.g., step=10 shows cycles 0, 10, 20…)
Use stepping for large datasets to reduce plot density while maintaining overall trends.

Step filter (within cycle)

Filter which steps within each cycle are shown. This is useful for isolating specific protocol phases:
  • 0 - Show only the first step of each cycle
  • 0:2 - Show steps 0, 1, and 2 of each cycle
  • 1, 3, 5 - Show specific steps
Step numbers reset to 0 at the start of each cycle in this filter. So step 0 is always the first step of a cycle, regardless of the overall step count. This filter is only available when not using Advanced mode.

Advanced step filter (AI-powered)

The Advanced filter mode lets you filter steps using natural language or SQL. Simply describe what you want to see, and the AI generates the appropriate filter.

Using advanced filter mode

1

Select Advanced mode

Choose “Advanced” from the filter type dropdown. This is the default when no filter is active.
2

Describe what you want

Type a natural language description in the text field. For example:
  • “discharge steps longer than 1 hour”
  • “charge steps with capacity > 2 Ah”
  • “rest steps”
3

Click Apply

The AI generates the SQL filter and applies it immediately. The plot updates to show only matching steps.

Refining your filter

When a filter is active, you can modify it with follow-up prompts:
  • “also filter for steps longer than 1 hour” → adds to existing filter
  • “change to charge steps instead” → replaces part of the filter
  • “remove the duration filter” → removes a specific condition

SQL dialog (advanced editing)

Click the code icon </> to open the SQL dialog for more control:
  • AI prompt field: Describe what you want, then click “Generate”
  • SQL editor: Edit the SQL WHERE clause directly
  • Match mode: Choose how to apply the filter (see below)
  • Example queries: Click any example to insert it
  • Available columns: Full reference of filterable columns

Match modes

When filtering, choose how matches are applied:
  • Matching steps only: Show only the specific steps that match your query
  • Full cycles: Show all steps from cycles that contain at least one matching step
Use “Full cycles” mode when you want to filter by a cycle characteristic (like total cycle discharge capacity) but still see the complete cycle data for context.

Available SQL columns

The SQL dialog shows the complete list of available columns. Common columns include: Step identification:
  • step_count - Overall step number
  • cycle_count - Cycle number
  • step_from_cycler - Original step number from cycler
  • cycle_from_cycler - Original cycle number from cycler
Timing:
  • duration_s - Step duration in seconds
Capacity (step level):
  • charge_capacity_ah - Capacity charged in this step
  • discharge_capacity_ah - Capacity discharged in this step
Energy (step level):
  • charge_energy_wh - Energy charged in this step
  • discharge_energy_wh - Energy discharged in this step
Capacity (cycle level, cumulative):
  • cycle_charge_capacity_ah - Total charge capacity for the cycle
  • cycle_discharge_capacity_ah - Total discharge capacity for the cycle
Voltage:
  • start_voltage_v, end_voltage_v
  • min_voltage_v, max_voltage_v, mean_voltage_v
Current:
  • min_current_a, max_current_a, mean_current_a
Power:
  • min_power_w, max_power_w, mean_power_w

Plot interactions

The visualization plots support standard interactions:
  • Zoom: Click and drag to zoom into a region
  • Pan: Hold shift and drag to pan
  • Reset: Double-click to reset the view
  • Hover: Move cursor over data points to see values

Automatic data loading

When you zoom into the time series plot, Ionworks Studio automatically fetches higher-resolution data for the zoomed region. A loading indicator appears while data is being fetched.
For large datasets, the initial view shows downsampled data for performance. Zooming in reveals the full resolution data for that time range.

Best practices

Begin with the full dataset view to understand overall trends, then use filters to focus on specific cycles or conditions of interest.
Stack cycles mode makes it easy to spot changes in voltage profiles, capacity, or other characteristics as the cell ages.
Use cycle filtering to select a range of cycles, then add Advanced filtering to isolate specific step types within those cycles.
The Advanced filter understands plain English. Try “discharge steps over 1 hour” or “cycles with high capacity” instead of writing SQL manually.
Enable “Show step data” and hover over your data to see step metrics and the SQL column names you can reference in filters.

Comparing measurements

To put several measurements side by side, select them in a measurements table and plot them together in the plot drawer.

Selecting measurements

Tick measurements in any measurements table: the project’s Measurements page, a cell specification’s Measurements tab, or a cell instance’s measurements. The selection is shared between these tables, so you can build a comparison across specifications and cells.
  • It is kept across pages, filters, searches and moves between those tables, and when you reload the page.
  • It is emptied when you switch to another project. A new browser tab starts with an empty selection.
While something is selected, the table’s toolbar shows the selection actions:
  • N selected opens a list of every selected measurement with its specification and cell instance. Remove measurements one by one, or use Download data (.zip), Select all N matching (everything matching the table’s current filters) or Clear all.
  • Edit tags adds or removes tags on the whole selection.
  • Plot opens the plot drawer.

The plot drawer

Pick Plot, then choose a plot type. The types on offer depend on what the selected measurements contain: A plot type the selection can’t support stays visible but disabled, with the reason, such as “4 of 12 have no cycle data”. Its tooltip names the measurements that don’t fit. All measurements in a plot share one cycle and step filter. The drawer sits over the table without blocking it:
  • Add or remove measurements by ticking or unticking rows while the drawer is open. A measurement added to an open plot that can’t be drawn there is listed under Left out of this plot, with Remove N from plot.
  • Resize the drawer by dragging its edge.
  • Close it to collapse it to a tab on the edge of the page, such as “Time series · 12”. The tab reopens the same plot. While the drawer is closed, the plot keeps its own list of measurements, and Plot becomes Add N to plot, Open plot or New plot.
  • The plot survives a reload and stays until you discard it. New plot, Discard and going back to the plot types ask for confirmation if the plot was never saved as a template or sent to a dashboard.

Saving a plot as a template

Save as template stores the plot type and its settings for the whole project. Templates show who made them and when, and appear as plot types in the picker, so anyone in the project can apply the same plot to a different selection.

Sending a plot to a dashboard

Send to dashboard adds the plot to a new or existing dashboard. Choose what it plots:
  • These N measurements: exactly the measurements in the plot.
  • All measurements matching the table’s filters: the filters are applied again every time the dashboard is viewed, so measurements added later that match them appear on the plot.

Dashboards

A dashboard is a page of plots over a project’s data. Each plot is saved as a recipe that says which records to read and how to draw them, so it is redrawn from the current data whenever the dashboard is viewed, under the viewer’s own project permissions. Open Dashboards in a project to list its dashboards, and create one with New dashboard. Use Edit details on a dashboard (or in its row menu on the list) to change its name and description. These describe the dashboard; they do not change its plots.

Adding plots

A dashboard’s New plot offers two ways to make a plot.

Build a plot

The builder uses the same plot types and controls as the plot drawer, with a live preview.
  1. Choose the measurements. The first step shows the project’s measurements table, with its search, filters, tag filter and columns. Filter it down, then choose:
    • These N measurements: the rows you ticked, or every current match if you ticked none.
    • Anything matching these filters: a live query, re-run on every view, so measurements added later that match are plotted too. With no filter set, it plots every measurement in the project.
  2. Choose a plot type, including any of the project’s plot templates, and adjust it.
You can also send a plot to a dashboard straight from the plot drawer.

Ask the agent

Describe the plots you want in plain language, for example “discharge capacity retention for every cell in batch B, coloured by temperature”. The agent reads the project’s data, checks that each plot renders, and proposes it for you to review. Nothing is saved until you accept it. On an empty dashboard, the prompt leads the page, above a summary of what the project contains. Give me ideas suggests starting prompts that name the project’s real records; picking one fills in the prompt so you can edit it before sending. The conversation docks beside the dashboard, so you can watch proposals land. There is one conversation per dashboard. Each proposal appears on the dashboard itself:
  • A new plot can be saved or discarded.
  • A change to an existing plot puts that plot into review, with a Proposed / Current toggle and a summary of what changed. Choose Apply change, Save as new, Refine (ask the agent for another pass) or Discard.
  • A proposed removal fades the plot and offers Keep plot or Remove.
A dashboard started from scratch is named by the agent’s first accepted proposal, unless you have already named it.

Builder plots and agent plots

Every plot shows a Builder or Agent chip.
  • Builder plots keep their builder settings. Their menu has Edit plot, which reopens the builder with the plot’s measurements or filters, and Ask the agent.
  • Agent plots are changed by asking the agent, or with Edit code.
Applying an agent change to a builder plot turns it into an agent plot for good, and the review button says so: Apply (becomes agent plot). Choose Save as new plot instead to keep the builder version.

Reading a plot

  • Description. A line under the title says what the plot shows. Edit it in the plot’s Configure panel.
  • Data in this plot. The count at the bottom of each plot opens a list of every record it read, grouped by type and by the cell they were run on, each linking to its page. Records you can no longer open are listed as “Deleted or no access”. Copy ids copies the list.
  • Filtered by. The same list shows the filters that selected the records, such as a measurement tag or an analysis type.
  • Controls. Some plots have controls, such as a pulse set or a tag picker. Changing them redraws the plot for you without changing the saved plot.

Changing how a plot looks

The Appearance section of a plot’s Configure panel changes its title, axis labels and colours without asking the agent:
  • Title and X / Y axis labels.
  • Palette: Default, Colour-blind safe, Vivid, Muted, or Sequential (ordered series). Use Sequential for ordered series such as C-rates or temperatures.
  • Series colours, one per series. A cell’s measured and fitted traces share a colour.
Your appearance choices are kept when the agent later edits the plot. If an agent change touches something you set, the review lists each conflict with Keep mine or Use the new one.

Viewing and editing a plot’s code

Edit code in an agent plot’s menu (View code if you can’t edit the dashboard) shows its recipe in three tabs:
  • Transform: the JavaScript that turns the data into the figure.
  • Plan: the JSON description of which records to read.
  • Params: the plot’s controls and their defaults.
Edit the recipe and press Run (or ⌘/Ctrl+Enter) to preview it. Save is enabled only once the code on screen has run without errors. If someone else changed the plot while you were editing, saving is refused rather than overwriting their change. The toast after saving offers Undo. Builder plots have no Edit code: their code is generated from the builder settings, so change them with Edit plot.

Next steps

Data format

Understand the data structure for better filtering.

Reading data

Retrieve and analyze data via the Python API.