Skip to content

Guides & reference

Figure

Compose journal-ready multi-panel figures from your data at the journal's real width, check them against its artwork rules, and export every format.
Sculptural study of connected forms and structured ideas

Figure is the flowss studio for journal-ready research figures. You bring a dataset in, draw panels from it, compose them at your journal's real column width in millimetres, and export files that already meet that journal's published artwork rules. Every value in a generated panel comes from your rows; nothing is retyped by a model. A compliance check reads the composed artwork the whole time you work (width, height, type size, image resolution, vector format, colour mode and colour-vision safety), and an export gate stops a figure that breaks a blocking rule from leaving until you repair it or record that you read the finding. One project holds a whole manuscript of figures, each with its own data, cleaning ledger and analyses, and a single click writes them all, with a preflight report, into one ZIP. You open Figure at /figure.

This page covers the workspace, bringing data in, drawing and composing panels, the journal check and every export. The cleaning, transform, statistics and study-design benches have their own page: Figure analysis and statistics.

At a glance

TopicWhat you need to know
Where/figure. The browser tab reads flowss — Figure — journal-ready research figures from your dataset
PlanStarter and above. A Free account is sent to the pricing page. See Plans and what they include
InputPaste or upload CSV, TSV or JSON; load one of 5 sample datasets or 13 figure starters; paste or upload an SVG; upload a PNG, JPEG, GIF or WebP image; or receive rows from the Studio, the Lab or the Library
Panels36 chart types to build by hand, plus recommended charts for your columns, statistical result panels, a shared colour key, pasted SVG and embedded images
JournalsNature, Science (AAAS), Cell Press, PNAS, Elsevier (generic journal), IEEE, PLOS, Springer, and Generic (no journal selected)
CheckingContinuous and deterministic. Errors block export; warnings advise. Many findings carry a one-click repair
ExportSVG; PNG and TIFF at the target dpi; PDF at printed size; a manuscript ZIP of every figure plus preflight.txt; a reproducibility bundle; the data as CSV; and LaTeX, subfigure, Markdown, caption and Methods text to copy
ManuscriptUp to 12 figures in one project, switched from the title
AIThe prompt at the bottom opens the flowss Figure Agent, the studio's figure analyst: a deterministic Advisor that needs no AI, and an AI chat with the agent that needs your own key (Starter) or hosted AI points (Plus and up). See AI in flowss
CollaborationFigure has no live sessions, comments or share link. Hand work on with exports, Send to or Study this figure
SavingAutosaves in this browser, syncs to your other devices with your workspace, and can be checkpointed to the Vault. Each figure that holds work is also a card in the Library

On Windows and Linux, read ⌘ as Ctrl, ⌥ as Alt and ⇧ as Shift throughout this page.


Opening Figure

  1. Sign in. Figure needs a signed-in account; a signed-out visit goes to sign-in and returns you to the same address afterwards.
  2. Go to /figure, or choose Figure from the workstation navigation.
  3. If your plan is Free, you are redirected to /pricing. Starter, Plus, Ultra and Enterprise all open Figure.

A short loading skeleton shows while the studio starts. A first visit lands on the canvas with nothing open and the Bring data in card in the middle. After that, Figure remembers which centre view you had up (Data table or Figure) and which face of the analyst you last used (Advisor or AI chat). It always reopens with the benches and the analyst put away, so a reload lands on a clear canvas. On a screen narrower than 1,024 pixels everything opens closed regardless.

The workspace

The canvas is the page. Everything else floats on it in fixed places and puts itself away when you are done with it.

PlaceWhat is there
Top left (identity island)The figure's name (click it to rename; a figure with no name shows as Figure 1, Figure 2 and so on, by position), the ▾ figure switcher, the status badge and the ⋮ file menu
Top rightExport, the one filled button on the screen. It opens the Export bench as a popover
Left edge (tool rail)Select (V), Hand — drag to pan (H), Data, Analyse, Chart, Annotate, Layers
Bottom centreThe prompt, Ask the flowss Figure Agent…, with the AI settings button
Bottom right (view island)Undo, Redo, the Data table / Figure toggle, and, on the Figure view once there is a panel, zoom out, the zoom percentage menu and zoom in; then Help
Right edgeThe Inspector drawer with three tabs: Style, Source and Page. It can be pinned open
Above a selected panelThe panel's context toolbar, shown only while a panel is selected on the Figure view
Bottom centre, over the canvasThe amber marker Example data — not real: this sheet holds a sample dataset, while the figure's rows are a sample

The Help button opens Keyboard shortcuts and Help centre.

The empty canvas

StateThe card in the middle shows
No data yetBring data in ("Paste CSV, TSV or JSON — every panel is drawn from it."), a paste box, Analyse data, Upload a file, the list Or start from a figure, and the links Load a sample (loads the first sample dataset, Clinical trial — blood pressure) and Paste SVG
Data but no panelsAdd the first panel, your rows read back on one line ("20 rows · 5 columns: patient, arm, …"), the buttons Draw a chart and Run a test, and the links Open the table and Paste SVG

The card steps aside while a rail flyout is open, because the flyout is the same door.

The tool rail and its benches

The five tool buttons each open a bench as a flyout beside the rail. Pressing the same button again closes it. A flyout with several tabs remembers the tab you were last on for the rest of the session.

Rail buttonFlyout tabsWhat the benches do
DataData in, Clean, TransformPaste, upload or sample a dataset; findings in the rows with one-click cleaning; filter, aggregate, derive and reshape the table. A warning badge counts the findings in the rows
AnalyseTests, DesignRun a statistical test and add the result as a panel; sample size, power, detectable effect and equivalence margins before there are rows
ChartChartsRecommended charts for your columns and the manual chart builder. Disabled until there is data, with the reason "Bring data in first"
AnnotateAnnotateText, arrows, brackets, significance marks and scale bars drawn over the panels
LayersPanelsEvery panel on the figure: caption, span, geometry, source, style and data refresh. A badge counts the panels

Three benches are not on the rail because they are not tools: Compose is the Inspector's Page tab, Check is the status badge's popover, and Export is the Export button. All eleven benches can be reached by name from ⌘K (for example, type "Clean" or "Check").

The analysis benches (Clean, Transform, Tests and Design) are documented in Figure analysis and statistics.

The ⋮ file menu

The verbs in this menu are also ⌘K commands, so the menu and the palette always agree. The exceptions are Data (CSV), the studio rows under Send to ▸, and the three lists (Load a sample ▸, Start from a figure ▸ and Journal ▸), which live in the menu only.

RowWhat it does
New figureA fresh figure in this manuscript, placed after the current one and seeded with the dataset on the bench
Duplicate figureA copy of this figure, its data and its bench, as a new figure named after the original with " copy" added
Load a sample ▸One of the five sample datasets
Start from a figure ▸One of the 13 figure starters, which opens as a finished figure
Import ▸Import data file… (CSV, TSV or JSON), Import SVG file…, Paste SVG… (opens the Data bench with its SVG box focused), Import image…
Export ▸Export SVG, Export PNG, Export TIFF, Export PDF, Export every figure, Export repro bundle, Data (CSV). Data (CSV) is disabled with "No rows yet" until there is data
Send to ▸Study this figure, then Studio, Weave, Lab, BPMN, Science and Evidence. The studio rows are disabled with "Add a panel first — there is nothing composed to send" while the figure is empty
Page setup…Opens the Inspector on its Page tab
Journal ▸Pick the journal preset. The row shows the current journal's short name (for example "Science"), and nothing while Generic is selected
Delete figure…Removes this figure from the manuscript after a confirmation. Its panels, data and bench go with it

⌘K also offers Run compliance check (opens the Check report), Generate figure legend, Undo and Redo, and "go to" rows for every screen: the two views, the eleven benches and the analyst's two faces.

On a phone, the status report, the view toggle (Show the figure or Show the data table) and the zoom menu move into the ⋮.

The status badge

The badge beside the title is the figure's one verdict.

The badge showsWhen
A count of errors and warningsThe figure has panels and the journal check found something. The number is the Check report's
A readiness word: Empty, Draft, Sound, Reviewed or PublishableThere is nothing to count, or the figure has no panels yet
Not savedThis browser's storage refused the last save. The detail reads "Storage is full — export to keep this work"

Clicking the badge opens the Check report, titled Check · followed by the journal's name (see Checking against the journal). The platform's stage chip also sits inside it; choosing a stage there hands the work to the flowss Figure Agent's AI chat. See The work model.

A manuscript of figures

A Figure project is a manuscript: up to 12 figures that you switch between from the title. Each figure keeps its own dataset, its own data ledger and its own analyses, so the Methods paragraph for Figure 2 describes Figure 2's rows and nothing else.

ActionHow
Switch figureClick the title's ▾ and choose a figure, or press ⌥⌘← / ⌥⌘→ to step through them (the step wraps from last to first)
New figureNew figure at the foot of the switcher, ⋮ → New figure, or ⌘K. The new figure inherits the dataset on the bench and the ledger that prepared it, but not the analyses
DuplicateThe copy icon on a figure's row, ⋮ → Duplicate figure, or ⌘K. The copy carries the composition, the data and the whole bench. Duplicating another figure's row opens that figure first, then copies it
RenameClick the title, or the pencil on the open figure's row. Names are kept to 120 characters
ReorderDrag a row in the switcher, or focus a row and press ⌥↑ / ⌥↓. Reordering is off while the search box is filtering
DeleteThe bin icon on a row (shown only while the project has more than one figure), or ⋮ → Delete figure…. Both ask you to confirm ("Delete" the figure's name "? This cannot be undone.")
Find a figureA Find a figure search box appears at the top of the switcher once a project holds more than seven figures

Each row in the switcher carries a small database marker. Hover it to read the panel count and one of: "the dataset on screen", "carries its own dataset, different from the one on screen" (the marker turns amber, so you know choosing it will swap the table), or "no data of its own".

Note: A manuscript always keeps at least one figure. ⋮ → Delete figure… on the last one says "A manuscript keeps at least one figure — add another before deleting this one."
Warning: Work that finishes after you switch figure is never applied to the wrong one. If a chart, a fit, a restyle, a re-render, a refresh, a legend or an AI run lands after you moved, it is dropped and a toast names the figure it was for, for example: That chart was for "Figure 1", not the figure now on screen — it was not applied. Switch back to it and try again.

Your first figure, step by step

  1. Open /figure. The canvas shows Bring data in.
  2. Paste CSV, TSV or JSON into the box and press Analyse data, or press Upload a file, or press the Load a sample link. To see a finished figure first, pick one from Or start from a figure (volcano, Kaplan–Meier, forest plot and others).
  3. The card now reads your rows back (for example "20 rows · 5 columns: patient, arm, …") and offers Draw a chart and Run a test. Press Draw a chart.
  4. On the Charts bench, press one of the Recommended charts, or choose a Chart type under Build by hand, pick the columns for each role and press Generate panel. The panel appears on the canvas at its printed size.
  5. Add more panels the same way. Open Layers to caption them and set how many grid columns each spans.
  6. Press the title's ⋮ → Journal ▸ and choose your journal. The figure snaps to that journal's column width and line-art dpi, and the panel letters follow its convention where one is known.
  7. Open Page setup… to set the column fit, the title and the caption. Generate legend writes a caption from the title and panel captions.
  8. Watch the status badge. If it shows a count, click it to open the Check report and press the repair buttons, or fix the finding by hand.
  9. Press Export. Choose the format, or the All N figures + preflight (ZIP) button for the whole manuscript.

Bringing data in

Paste or upload

The Data in tab (rail Data) is the full intake; the canvas card is a quick version of it.

ControlWhat it does
The paste box ("Paste CSV, TSV or JSON")Holds the text you paste. Its tooltip reminds you that every value in a generated panel comes from these rows
Analyse dataParses the box and puts the rows on the bench. Disabled until there is text (tooltip "Paste some rows first")
Upload file (Upload a file on the canvas card, ⋮ → Import data file…)Reads a .csv, .tsv or .json file. Choosing the same file again re-reads it
Or load a sampleA list with two groups, Datasets and Figure starters — open as a finished figure (each starter is marked "(illustrative)")
The rows lineThe row count and each column with its type, for example "20 rows · patient (string), arm (string), …", once data is on the bench

What the parser accepts:

InputNotes
CSV, TSV, semicolon- or pipe-separated textThe first line must be a header. The delimiter is detected; if splitting on the guessed one leaves the rows uneven, or every comma sits between two digits (a decimal comma), the file is re-read with the right delimiter and a note says so
JSONAn array of row objects, or an object holding one under data, rows, values or records
Decimal commasA column that writes "0,5" is read as 0.5 and a note names the column and an example
Missing-value codesNA, N/A, NaN, null, #N/A, #NA, <NA>, ., -, – and — (in any letter case) in an otherwise numeric column become blanks, and a note says how many, where. None and ? are deliberately not read as missing
Short rowsA row with fewer values than the header has its missing cells read as blanks, and a note names the rows
Limits200,000 rows and 256 columns

Notes appear in amber above the rows line. They are not errors: the data loaded, and the note tells you how it was read.

Warning: Pressing Analyse data or uploading a new file replaces the rows and starts a fresh provenance chain: the data ledger, the analyses on the bench and any declared experimental unit are cleared, and undo history for the table starts again. If you had edited the table, a note says "Reloaded from the pasted text — earlier table edits, the ledger and past analyses were reset."

Sample datasets and figure starters

Samples are for learning the studio. The five datasets are:

SampleField
Clinical trial — blood pressureMedicine
Materials stress test — steel specimensEngineering
Monthly revenue by regionBusiness
Flower morphology (illustrative) — three speciesBiology
Support survey — satisfaction by channelSocial science

Loading a sample also sets the analyst's research discipline to the sample's field, if the discipline is still General research.

The 13 figure starters are the classic research figures, each a small invented dataset that opens as its finished figure through the same chart builder you use by hand, drawn across the full width of the grid. Replace the rows with your own (with Refresh data on the panel) and the same figure is drawn from them.

StarterWhat it opens as
Grouped bar chart with error barsInvented ELISA results, mean ± SEM of four biological replicates
Box and violin plot with jittered points (raincloud)Invented reaction times for 72 participants in three sleep conditions
Scatter plot with regression line and 95% CIInvented air and water temperatures at 30 sites; the line and band are fitted and recorded by the Analyse bench
Dose–response curve (4PL, IC50)Two invented compounds over nine concentrations in triplicate; a four-parameter logistic is fitted to each with 95% bands
Kaplan–Meier survival curveInvented overall survival for 80 patients in two arms, with censor ticks, bands, medians and numbers at risk
Volcano plotInvented RNA-seq results for 293 genes, with 2-fold and adjusted-p < 0.05 cut-offs
Clustered heatmapInvented expression z-scores for 16 genes, reordered by hierarchical clustering
Time series with confidence bandInvented weekly influenza incidence with exact Poisson intervals
Before–after paired plotInvented FEV1 for 18 patients before and after treatment, one line per patient
Forest plot (meta-analysis)Ten invented trials; the pooled random-effects diamond, I², τ² and prediction interval are computed when the plot draws
Histogram with density curveInvented, right-skewed vitamin D values for 160 adults
PCA biplotInvented soil analyses from 24 sites, scores and loadings on two components
ROC curveInvented troponin results for 120 patients with AUC, DeLong interval and Youden cut-off

The example-data marker

While a figure's rows are a sample (Figure recognises a sample when at least half your rows match one), the studio says so everywhere it matters until you replace them with your own:

WhereWhat it says
The canvasThe amber pill Example data — not real: this sheet holds a sample dataset
The Data in tabExample data — not real. These rows are a sample that ships with the studio. The Methods text, preflight report and every export say so until you analyse or upload your own data
Every exported SVG, PNG, TIFF and PDF, and the whole figure sent to another studioA stamp inside the figure's box
The Methods paragraphOpens with: Example data — not real: these values are an example that ships with the platform, not data from a study.
preflight.txt and the bundle READMEOpen with the same warning

Cleaning a sample does not clear the mark; replacing the rows does. A new figure made from a sample's rows keeps the mark too.

Large datasets

Figure saves each figure's rows in this browser. Rows whose saved form would exceed 750,000 characters are kept for the session but not saved: the note "This dataset is too large to persist locally — it stays for this session and still exports." appears, the rows survive switching between figures, and every export still includes them. Reloading the page loses them, so keep the source file. A new figure cannot inherit rows this large: you are told "This dataset is too large to persist locally, so it did not travel to the new figure — paste or upload it here." A duplicate does carry them.

Rows from other studios

Several places hand rows to Figure, which opens them as a new figure titled after the data (or "Imported data") beside whatever you have open, with the toast "Your data opened as a new figure sheet":

FromControl
The Studio's data panel and intakeOpen in Figure studio — rows become a sheet
The Lab's Data benchOpen these rows in Figure
The Library's file import and the launchpad's start-with-data doorA data file you import there goes to Figure

The hand-off holds up to about 600 KB of text. If it cannot be staged the sending studio says "Couldn't stage the data (too large or storage unavailable)." If your project already holds 12 figures, the imported rows wait: the message says to remove a figure and reload the page, and they open then. See Moving work between studios.

SVG panels

Any SVG you already have can be a panel. Use the From an SVG you already have box on the Data in tab (or ⋮ → Paste SVG…), paste the markup and press Add as panel (disabled until the box has text), or press Upload .svg (or ⋮ → Import SVG file…).

Every SVG is cleaned on the way in: scripts and anything that can run or fetch are removed, and only references inside the document (#…) and embedded data:image/… pictures survive. If the SVG pointed at an external image or a linked file, the panel still arrives, with a note naming what was removed and that the panel "will export blank where it drew". Re-export the SVG with its images embedded as base64 data URIs and add it again.

A pasted SVG panel has no engine source, so it cannot be restyled, re-rendered from source or refreshed from new data, and it wears a grey untraced chip on the canvas.

Images: micrographs, blots and photographs

Under A micrograph, blot or photograph, press Upload image (or ⋮ → Import image…). The picture is embedded in the figure at its own pixel size, so the figure stays one self-contained file and the Check report can hold it to the journal's halftone dpi across the millimetres it occupies.

RuleDetail
AcceptedPNG, JPEG, GIF and WebP
RefusedTIFF, HEIC/HEIF, Photoshop documents and camera raw files, because no browser draws them inside a figure. Convert to PNG (lossless, right for a blot or a micrograph) or JPEG first. The Export bench writes TIFF for you on the way out
SizeUp to 12 MB per image. Larger files are refused with a message to downsample to about the pixel width the journal needs
Unreadable headerA file whose pixel dimensions cannot be read is refused with a request to re-save it as a plain PNG or JPEG

The image panel's caption starts as the file name without its extension, and its source line records the file name, pixel size and type. An image panel cannot be restyled or refreshed.


The Data table view

Switch the centre of the screen between Data table and Figure with the toggle in the view island (or ⌘K → "Data table"). The table is a card over the canvas holding every row, editable. With no data, the canvas shows the Bring data in card instead.

ControlWhat it does
RowAdds an empty row
ColumnAsks for a column name; Add creates it (Escape cancels)
Find & replaceOpens find, replace with and Replace in text columns
Row checkboxes, then Delete N rowsDeletes the selected rows. Selection clears whenever the table changes
The copy icon at a row's end (on hover, "Duplicate row")Duplicates that row
A column's nameSorts by it, ascending
The type badge123 (number), abc (text), date, t/f (true/false)
"N blank" under a headerHow many cells in the column are empty
⋯ on a header ("Column tools for" the column's name)Sort ascending, Sort descending, Rename… (type the new name and press Ok), Coerce to number, Coerce to text, Coerce to date and Coerce to boolean (the column's own type is left out), Fill blanks with the mean (numeric columns with blanks), Fill blanks with previous value (columns with blanks), Trim whitespace, Delete column
Any cellClick or tab into it to edit. Enter commits, Escape cancels. An empty cell shows ∅. Typing a number into a numeric column stays a number; anything unparseable stays text and the column's badge says so
The pagerShown when there are more than 100 rows: 100 rows a page, "Rows 1–100 of N"

The table's own counter reads "N rows · M columns". An empty table says "No rows — add one, or paste new data." If an operation is refused (renaming onto an existing name, deleting the last column, a coercion whose reading is ambiguous), the reason appears in a red strip above the table. Every edit is undoable and recorded in the data ledger. While the table is showing, ⌘Z and the view island's Undo undo data changes; while the figure is showing, they undo composition changes.


Drawing panels: the Charts bench

Open the rail's Chart button.

Under Recommended, up to six charts are proposed for your columns, each with its engine and a one-line reason. Press one to draw it.

Build by hand

Under Build by hand, choose a Chart type (the picker names each with its engine in brackets), pick a column for each role (roles marked "(optional)" can stay empty), set any options the type has, and press Generate panel. Below the picker, a line describes the chosen type. Options left blank use the default shown in the table.

Chart type (engine)RolesOptions
Bar chart (vega-lite)Category (x), Value (y). Repeats are averaged, or summed when the quantity adds upBar order; Value axis
Bar chart with error bars (vega-lite)Group (x), Mean (y), Spread, Series (optional). Needs one row per groupThe spread is: as its column is named (default), Standard deviation, Standard error, CI half-width or A stated range; Bar order; Value axis
Grouped bar chart (vega-lite)Group (x), Value (y), Bars within a groupBar order; Value axis
Stacked bar chart (vega-lite)Category (x), Value (y), Stack byStack as: Raw totals (default) or Shares of 100%; Bar order
Small multiples (facets) (vega-lite)X axis, Y axis, One panel per, Colour by (optional)Draw each as: Points (default), Lines or Bars; Y axis and X axis scale
Violin plot (vega-lite)Group (x), Value (y)
Raincloud plot (violin + box + points) (glyphscript)Value, Group (optional)
Dual-axis line chart (vega-lite)X axis, Left axis, Right axis. The second series is dashedX axis scale
Line chart (vega-lite)X axis, Value (y), Series (optional)Value axis
Line with confidence band (vega-lite)X axis, Estimate (line), Band lower end, Band upper end, Series (optional)The band is: an interval (unstated) (default), 95% confidence interval, 90% confidence interval, 95% prediction interval, 80% prediction interval, Mean ± 1 SD or Observed range
Scatter plot (vega-lite)X axis, Y axis, Colour by (optional)Y axis and X axis scale
Dose–response plot (vega-lite)Dose (concentration), Response, Curve per (optional)Dose axis: Logarithmic (default; controls at 0 are noted, not drawn) or Linear (draws controls at 0, or a column already in log dose); Response axis scale
Volcano plot (vega-lite)log₂ fold change, P value (raw or adjusted), Feature name (optional)Fold-change cut-off: 2-fold (default), 1.5-fold or 4-fold; Significance cut-off: p < 0.05 (default), p < 0.01 or p < 0.001
PCA biplot (vega-lite)First component (x), Second component (y), Row name, Score or loading, Colour scores by (optional)
Histogram (vega-lite)ValueDensity curve: none (counts) (default), or Kernel density, bars as density
Box plot (vega-lite)Group (x), Value (y)Value axis
Before–after (paired) plot (vega-lite)Subject, First occasion (before), Second occasion (after)
Heatmap (vega-lite)X axis, Y axis, ValueRow and column order: alphabetical (default), As the rows are, or Hierarchical clustering (average linkage); Colour scale: sequential (default) or Diverging about 0 (z-scores, fold changes)
Pie chart (vega-lite)Category, Value. Best under seven categories
Matrix heatmap (plotly)Row label. Every numeric column becomes a column of the matrix
Sankey flow (sankey)Source, Target, Weight
Directed graph (graphviz)Source, Target, Weight (optional)
Tree diagram (graphviz)Child, Parent
Treemap (treemap)Item, Parent, Size (optional)
Funnel (funnel)Stage, Count
Choropleth map (choropleth)Region code, ValueAtlas: World (ISO codes) (default) or US states
Timeline (timeline)When, Event
Calendar heatmap (calendarheatmap)Date, Value
Word cloud (wordcloud)Term, Weight
Kanban board (kanban)Status, Card
PERT chart (pert)Task, Duration, Depends on (optional)
Kaplan–Meier survival curve (glyphscript)Follow-up time, Event (1) or censored (0), Arm (optional)Time axis is in: Days, Weeks, Months or Years
ROC curve (glyphscript)Score, Outcome (0/1), Second score (optional). A second score adds DeLong's paired comparisonThe score came from (see below)
Calibration plot (glyphscript)Predicted risk (0–1), Outcome (0/1)Risk groups: 5 (quintiles), 10 (deciles) (default) or 20 (vigintiles); The score came from
Decision curve (glyphscript)Predicted risk (0–1), Outcome (0/1). Net benefit across thresholds against treat-all and treat-noneThe score came from
Forest plot (meta-analysis) (glyphscript)Study, Estimate, CI lower, CI upper, Participants (optional)Effect measure: Hazard ratio (log scale) (default), Odds ratio (log scale), Risk ratio (log scale), Mean difference, Standardised mean difference or Risk difference; Pooling: Random effects (DerSimonian–Laird) (default), Random effects (REML), Random effects, Hartung–Knapp interval, or Fixed effect (inverse variance)

The shared options:

OptionChoices
Bar orderLargest first, Smallest first, Category A-Z, Category Z-A, As the rows are
Value axis, Y axis, X axis, Response axis (scale)Linear or Logarithmic
The score came fromA model fitted on these same rows (apparent) (the default), Internal validation, Bootstrap validation, Cross-validation (out-of-fold predictions), A held-out split of these rows, An external cohort or A later time period (temporal). It says where the predictions were produced, because a score from a model fitted on the same rows is optimistic

For the engines behind these charts, see Choosing an engine and Charts and data-visualisation engines.

How generated panels behave

BehaviourDetail
VerifiedEvery generated chart is checked against your rows before it is drawn; a chart that does not trace back to the data is refused rather than shown wrong
Sized for printA new panel is drawn for the width one grid column occupies at your journal, with type solved to the journal's minimum size rather than left at the renderer's defaults
LinkedThe panel remembers a fingerprint of the exact rows and the cleaning they went through, which is what makes Refresh data possible later
CaptionedIts caption starts as the chart's title, or as the summary's caption (for example "mean ± SEM, n = 3 mice …") when it charts rows you produced with Summarise for plotting on this figure
RefusedA refusal appears in red on the Charts bench, which opens itself so you see it. Where the studio knows the fix, a button above the refusal applies it

The commonest refusal is a bar chart with error bars over rows that repeat a group: "Error bars need one row per group - the spread is already a summary, and the average of two standard deviations is not a standard deviation. … Summarise on the Analyse bench first." The button beside it, Summarise followed by your value and group columns and as mean ± SEM (for example "Summarise weight by arm as mean ± SEM"), summarises the table in one undoable step; then press Generate panel again. If you declared an experimental unit, the button honours it (it averages within each unit first). To summarise by hand, use Data → Transform → summarise.

The first chart of a session can take a few seconds while the chart renderer loads.


The canvas

The Figure view shows the composed figure exactly as it exports. 100% on this canvas is the true printed size.

GestureEffect
Click a panelSelects it (a rose outline), shows its letter chip and its context toolbar
Drag a panelReorders it: drop it on another panel's position. Letters follow reading order
Drag the round handle on the right of the selected panelChanges how many grid columns it spans. The layout follows live
Double-click a panel, or Enter / Space on a focused oneOpens the panel's source in the Inspector, for a panel that has one
TabMoves between panels; focusing a panel selects it
Wheel or trackpad pinchZooms at the pointer
Hold Space and drag, or use the HandPans

Panels that the provenance ledger has something to say about wear a chip at their bottom-right corner:

ChipMeaning
stale (amber)A computed result drawn on the panel (a fit, a band, a bracket) was calculated before a column it read changed. Hover for the column
orphan (amber)The ledger entry the panel's drawing cites is no longer in the figure, so whether it still holds cannot be checked
untraced (grey)A pasted SVG or a statistical panel: nothing on this figure records where its content came from

A current panel wears nothing; the absence is the signal. See Figure analysis and statistics.

View controls

The zoom percentage menu in the view island holds:

RowKeyWhat it does
Zoom to fit1Frames the page in the space available
Zoom to 100%0The true printed size
Page sizeShows the printed size (for example "85 × 120 mm · Nature") and opens the Page settings
Column guidesGDraws the grid columns and each panel's data region
Millimetre rulersRRulers along the top and left, in page millimetres
Colour-vision proofPA strip of five copies of the figure: As drawn, Protanopia, Deuteranopia, Tritanopia and Greyscale, simulated with the same tables the Check report measures the palette with. Close puts it away
Full screenFull-screen browser view
Hide interface⌥ZHides every island except the view island, for looking at the work; Escape or ⌥Z brings them back

+ (or =) and - zoom in and out. While the column guides are on, or the panels are aligned on their data regions, hovering a plot shows the data value under the pointer, read back through the panel's own axes.

The panel context toolbar

Controls that do not apply to a panel are absent rather than disabled.

ButtonShown whenWhat it does
The panel letter and engineAlwaysWhich panel, and what drew it
StyleThe panel is a Vega-Lite chartOpens the Style inspector
Edit sourceThe panel has a recorded sourceOpens the Source editor
Refresh from new dataThe panel was drawn from your dataOpens the refresh flow
Duplicate panelAlwaysCopies the artwork, caption, span and source (not the data link) right after the original
Copy SVGAlwaysCopies the panel's SVG; the button reads Copied briefly
Download panel SVGAlwaysSaves the panel as a file named from the figure and the panel letter (<figure>-panel-<letter>.svg)
Send to…AlwaysSends the panel to another studio. A panel drawn from data travels as its engine source; a pasted one as SVG
⋯ → Remove panelAlwaysRemoves the panel (Delete on the canvas does the same)

Working with panels

The Layers bench

The rail's Layers button lists every panel in reading order. With no panels it says "No panels yet."

Control on a panel's cardWhat it does
The letter buttonSelects the panel, which also makes it the flowss Figure Agent's target ("Target this panel for the flowss Figure Agent"); press again to release
The caption box (placeholder "Panel A caption")The panel's own caption, used in the figure legend and the subfigure snippets
Span (a number) of the grid's column countHow many of the grid's columns the panel spans
The engine tagWhat drew the panel
Refresh data, Style, SourceOpen those editors in the Inspector (shown only where they apply)
The download icon"Download this panel's SVG"
Start a new rowForces this panel to begin a new row
Make this a spacerTurns the cell into empty space that takes no panel letter
Height (mm)A fixed height in millimetres, or auto when left empty
CropOpens top, right, bottom and left: the percent taken off each side of the panel's own box, up to 45% a side. The crop moves the panel's view box, so it is lossless and undoing it restores detail. The button reads Crop ✓ while a crop is set
The frame lineOne sentence on what the panel publishes about its data region (for example "Panel A publishes its plot rectangle: …"), or that it publishes none, which means it cannot take part in alignment, shared axes or a computed bracket
Bracket linesThe computed significance brackets on this panel. A stale, orphaned or misdrawn bracket shows the Check report's sentence in amber
↑ / ↓Move the panel earlier or later
The bin iconArms on the first click ("Click again to remove") and removes on a second click within about two and a half seconds

The Style inspector

For a Vega-Lite chart panel, Style opens the Inspector's Style tab, Panel appearance. It changes appearance only: it refuses any change that would move the panel's data, and your choices are carried across a data refresh. Text fields commit when you leave them or press Enter.

FieldDetail
Chart titleDrawn above the panel
X axis label, Y axis labelDefault is the column name. Disabled with "This panel has no x/y axes." on a chart without them (a pie, for example)
PaletteRenderer default, Okabe–Ito (colour-vision safe), Viridis (perceptual, CVD-safe), Cividis (CVD-safe), Plasma (perceptual), Tableau 10, Category 10, Set 2 (soft), Dark 2, Blues (sequential), Greys (print-safe). Custom range (kept from the source) appears only when the source already names its own colours
The palette verdictRead off the drawn figure, never the palette's name: for example "Survives the colour-vision check and greyscale printing." or "Apply to measure — the colour-vision check reads the drawn panel, and this palette is not on it yet."
The palette reportThe same measured pairs the Check report shows, with Repair palette where a verified repair exists
Single colourA colour picker and Clear. "Applies when nothing else encodes colour." On a panel that colours by a data column it is disabled, and the palette decides the colours
Value axis includes zero"A truncated bar axis manufactures an effect." Unavailable while the log axis is on
Logarithmic value axis"State the base in the legend."
Grid linesOn or off
LegendAutomatic, Right, Bottom, Top, Left or Hidden
Tick label size (units), Axis title size (units)Drawing units, not points. The hint states the printed size, for example "Prints at ~6.4 pt — this journal's floor is 7 pt."
Draw width (px), Draw height (px)"Sets the panel's aspect."
Apply to panelRe-renders the panel with the new style
Defaults"Clear every visual override"
CloseCloses the form without applying

With no chart panel selected, the tab reads "Select a chart panel to style its titles, axes, palette and type."

The Source editor

Edit source (or Source on a card, or a double-click) opens the Inspector's Source tab with "The" engine's name "source that drew this panel. Edit and re-render — the result is scrubbed before it replaces the artwork." Edit the text and press Re-render, or Cancel. A hand-edited source keeps its data link. An error from the renderer appears under the box and nothing changes. With no panel that has a source selected, the tab reads "Select a panel drawn from source to edit what drew it."

Refresh from new data

A panel drawn from your data can be redrawn from a newer export of the same data, with its styling kept.

  1. Press Refresh data on the panel's card, Refresh from new data in the toolbar, or the Refresh from new data button on the Source tab.
  2. Paste the data as it is now, or press Upload file.
  3. Press Check drift. The drift report says whether the panel can be refreshed ("Compatible — every column this figure reads survives." or "Not refreshable as the data stands.") and what changed: rows added or removed, new or missing columns, and columns whose type changed.
  4. If it is compatible, press Refresh panel (the button names the panel's letter). Cancel abandons the refresh.

Editing the pasted text after a check clears the drift report, so the panel is never refreshed from rows you did not check.

What a refresh does:

EffectDetail
Replays your cleaningThe cleaning steps recorded on the old rows are re-applied to the new rows first, and a recorded sort is re-applied
Keeps your compositionLetter, caption and span stay; styling is carried onto the new chart
Replaces the bench's rowsThe refreshed rows become this figure's data
Clears analysesAnalyses and cleaning steps that described the old rows are cleared, and a note says so: "Cleared with the rows they described: … Re-run anything you still need on the new data."
Re-decides example dataYour own rows clear the example-data mark

A refresh is refused, with "Refused:" followed by the reason and "The panel is untouched.", when a column the chart reads is missing or changed type, or when the figure was drawn after table edits that cannot be re-applied to new rows (a filter, a cell edit). In that case make the same edits to the new data on the bench and chart it again.

Tip: The Export bench warns when a panel was drawn from rows that have changed since (for example "Panel B was drawn from rows that have changed since. …"). Refresh those panels before you export the repro bundle, so that re-running their sources against the bundled data reproduces them.

Page setup (the Compose bench)

Open the Inspector's Page tab with Page setup…, the Page size row of the zoom menu, or ⌘K → "Compose". From top to bottom:

ControlWhat it does
Align panels on their data regionsLines up the plots instead of the panel boxes: each column reserves its widest axis furniture and each row its tallest, so the y axes of stacked panels start at the same x. Needs two panels that publish a plot rectangle ("Two panels that publish a plot rectangle are needed before there is anything to line up."). Panels that cannot align are listed as partly aligned or unaligned, with the reason
Share y across, Share x acrossChips for each eligible panel. Claiming two or more panels draws one shared axis, after checking that their scales really are the same; a verdict line says whether the claim was verified. A claim over two different domains is refused in words naming both. Once two panels are claimed, Shared y axis title or Shared x axis title names the shared axis
Panel lettersA B C, a b c or 1 2 3, Bold, and a pt size (from the journal's minimum type up to 72, or auto). The row says how the journal letters its panels; when your choice differs, Use it switches to the journal's convention
JournalThe preset. A line under it summarises the journal: maximum height, minimum type, line-art dpi, accepted vector formats and colour mode
Column fitThe journal's sizes, with their widths. PLOS publishes a width range rather than columns, so its sizes read Narrowest permitted and Widest permitted
Grid columns1 to 6
Gutter (mm)0 to 20 in steps of 0.5
Target dpiThe raster resolution (minimum 72). The line art and halftone buttons beneath set the journal's two floors in one click
Figure title and NumberThe title names the files and the LaTeX label; the number (1 or more) names submission files (Figure3.tif)
CaptionOne paragraph. It travels with the figure as metadata and is never drawn into the artwork
Generate legendComposes the legend from the title and panel captions. An empty caption is filled; a caption you wrote is never overwritten silently: an amber box asks Replace the current caption with this legend? with Replace caption and Keep current
Copy alt textCopies an alt-text description of the figure
One shared colour keyReads the colour key out of a chart's own source (the first Vega-Lite chart that has one), turns the charts' own legends off and redraws them so the space returns to the plots, and adds the key as a full-width panel captioned "Key:" and the field's name, because a journal prints one key per figure

Generate legend, Copy alt text and One shared colour key are disabled until the figure has a panel.

Changing the journal sets the figure's width to the chosen fit's width at the new journal (for PLOS, the widest permitted) and the target dpi to the journal's line-art floor, and re-letters the panels if their style was the previous journal's convention. A letter style you chose yourself stays, and the Check report notes the disagreement. A vector format you picked for the old journal is reset.

Journal presets

Every number is the publisher's own, taken from its artwork guidelines, except where the preset's source note says otherwise; the Check report quotes the source beside every finding. Some values could not be confirmed from the publisher and the source note says so: the whole Springer entry is marked unverified, and the maximum heights of Cell Press and Elsevier are approximations. The Generic preset is not sourced from any publisher.

PresetWidths (single / double / full, mm)Max height (mm)Min type (pt)Line art / halftone (dpi)Vector formatsColourPanel letters
Nature89 / 183 / 1832475600 / 300EPS, PDFRGB or CMYKa b c
Science (AAAS)90 / 184 / 184227.56300 / 300PDF, EPSRGBA B C
Cell Press85 / 174 / 17424061000 / 300PDF, EPSRGBA B C
PNAS87 / 178 / 17822561200 / 300EPS, PDFRGBA B C
Elsevier (generic journal)90 / 190 / 19024061000 / 300EPS, PDFRGB or CMYKnot asserted
IEEE88.9 / 181.864 / 181.8642208600 / 300PDF, EPSRGB or CMYKa b c
PLOS66.802 to 190.5 (a range)222.258300 / 300EPSRGBnot asserted
Springer84 / 174 / 17423481200 / 300EPS, PDFRGBnot asserted
Generic (no journal selected)85 / 175 / 1752407600 / 300PDF, SVG, EPSRGB or CMYKnot asserted

Every preset except Generic prefers TIFF for rasters; Generic prefers PNG. A new figure starts on Generic (no journal selected), single column, two grid columns, a 4 mm gutter and 600 dpi. Generic is a fallback, not a journal: choose your target before treating a figure as submission-ready.

Note: Several publishers allow a width this three-size model cannot express (Nature's column-and-a-half, Cell Press's 114 mm, Elsevier's 140 mm, Springer's 39 and 129 mm). Individual journals from a publisher can also override the house rules. Check your target journal's own guide for anything unusual.

Annotating

The rail's Annotate button opens the annotation layer: marks that live on the figure, in millimetres, over every panel, so a redraw from new data never takes them with it.

The bench opens with the recommended path for significance: Significance brackets are computed. Run Tukey's HSD, Dunnett's test or Games–Howell on the Analyse bench and press Bracket on a row of its table; the bracket prints that test's adjusted p and cites its ledger entry. Bracket from a test opens the Analyse bench. See Figure analysis and statistics.

To add a mark, press one of the Text, Arrow, Bracket, Typed significance or Scale bar buttons (each marked with a plus). The mark appears a quarter of the way in and about a third of the way down, and is selected. With nothing added, the list reads "Nothing on the layer yet." Press a mark's name in the list to select it and show its fields.

Field (on a selected mark)Applies toDetail
TextText, bracket, typed significanceThe words. A new text mark reads "Label"; a typed significance mark reads *
What the bar meansScale barThe label, for example "10 um" (the default)
Length (mm)Scale barFrom 0.5 mm in steps of 0.5
Type size (pt)Everything except arrowsStarts at 7 pt or the journal's minimum, whichever is larger. The field's minimum is the journal's floor; a smaller size typed in is reported as a blocking annotation-font-size finding
ColourAllA hex colour, default #000000
Nudge ← → ↑ ↓AllMoves the mark 1 mm

With a mark selected, the arrow keys nudge it 0.1 mm, or 1 mm with ⇧ (not while you are typing in a field). A run of nudges is one undo step. Marks are placed with the nudge controls; they cannot be dragged on the canvas. Selecting a mark deselects any panel and the other way round, so the arrow keys never move both. The bin icon ("Remove this annotation") removes a mark.

Warning: A typed significance mark is typed, not computed: nothing checks it against a test, and the Check report lists every one as such. Use it only over artwork that no test on this figure produced.

Checking against the journal

Figure checks the composed figure continuously against the chosen journal's rules. Open the report from the status badge, from the ⋮ (on a phone), with ⌘K → Run compliance check, or with ⌘K → "Check". The report holds, in order:

PartWhat it shows
The readiness cardThe figure's level and the reason, plus up to three things still in the way that are not findings (such as a missing caption)
I will submit vectors asSVG (written here), EPS (convert the SVG: no EPS is written here) or PDF (convert the SVG: the PDF written here is raster). Figure writes SVG as its only vector file. A format the journal does not take is marked ", not accepted here". It defaults to SVG where the journal accepts it (the Generic preset) and otherwise to the journal's first format; choosing another makes the check answer for that choice. Changing the journal resets it
…in colour spaceRGB (what this studio writes) or CMYK (converted elsewhere)
Significance marksEvery significance mark on the figure: computed brackets with their test and ledger entry, and typed marks as "typed, not computed". A bracket whose drawing no longer matches its record offers Redraw brackets
The palette reportThe figure's colours as swatches, the confusable pairs worst first with their ΔE2000 distance under normal vision and each deficiency, any panel read as a colour ramp, the greyscale reading, whether colour is the only channel, and Repair palette with the number of colours and the exact swaps when a verified repair exists
The findingsA count line (for example "2 blocking issues · 3 warnings", or "No blocking issues · 1 warning"), then each finding with its rule, the journal's wording, the fix and, where possible, a repair button

When nothing is found the report says No issues found. and explains its limits: type size is read off the text a panel contains, resolution off the images it embeds, and colour-vision safety off the colours it uses more than one of. "Absent is untested, not cleared."

Readiness levels

LevelMeaning
EmptyNo panels yet
DraftAt least one blocking rule fires
SoundEvery panel passes the blocking rules, but there is no caption or there are warnings
ReviewedClean and captioned; provenance is the last gap (a panel carries no source, or was drawn from rows that have since changed)
PublishableClean, captioned, and every panel traceable to the data that drew it

The rules

Rule idSeverityWhat it checksOne-click repair
journal-knownErrorThe journal preset is one Figure knowsSwitch to the Generic preset
no-panelsWarningThe figure has panels; with none, only width, height, dpi and format were checked
column-widthErrorThe width matches a size the journal publishes (or sits inside PLOS's range)Use the journal's size, or set the width
max-heightErrorThe composed height is within the journal's maximumTile onto more columns, where that would fit
panel-off-figureErrorNo panel sits past the right edge (too many columns or too wide a gutter)
panel-viewboxWarningEach panel has a readable view box, so its height is not a guess
min-font-sizeError (warning when a panel's scale cannot be measured)The smallest text in each panel prints at or above the journal's minimumRaise this panel's type
min-font-size-cssWarningA <style> rule's font size prints below the minimumRaise this panel's type
min-font-size-transformWarningText under a transform whose printed size cannot be measured
text-overflowError or warningA label runs past its panel, past its plot, or overlaps another label
text-contrastWarningText has enough contrast against what it sits on (WCAG 2.1, 4.5:1)
target-dpiError or warningThe target dpi clears the journal's lower floor (error below it) and its line-art floor (warning between the two)Set the target to the line-art dpi
raster-resolutionError or warningEmbedded images have enough pixels for the millimetres they occupy, and are embedded rather than linked
dropped-referenceError or warningA panel does not depend on references that were removed on the way in
vector-formatErrorThe journal accepts the vector format you will submitSubmit an accepted format instead
vector-not-producedWarningThe audited vector format is one Figure does not write (EPS, or a true vector PDF)Submit SVG instead, where the journal accepts SVG
colour-modeWarningYour colour space matches what the journal asks forSubmit the RGB files as exported
panel-letter-conventionWarningPanel letters follow the journal's convention, where one is knownLetter the panels the journal's way
annotation-font-sizeErrorAnnotation text is at or above the minimumRaise this mark
annotation-off-figureWarningNo annotation runs off the figure's edge
colour-blind-safeWarningColour pairs stay distinguishable under the three dichromaciesRepair palette
colour-only-channelWarningColour is not the only thing telling the series apart
greyscale-safeWarningSeries do not merge in a black-and-white print
svg-conformanceError or warningThe markup renders the same outside a browser

Repairs are undoable with ⌘Z. Repair buttons appear on warnings as well as errors. Repair palette recolours every panel with the same old → new table, so one category stays one colour across panels; for a chart drawn from your data it changes the chart's source, so a later refresh does not bring the old colours back. If a restyled chart will not render, its drawn colours are swapped instead and a note says which panel.


Exporting

Press Export (or ⋮ → Export ▸, or ⌘K). The popover is titled Export followed by the figure's name.

The export gate

If a blocking rule fires, the bench opens with Export blocked and the number of rules (for example "Export blocked — 2 rules"), and the line "The journal will not take this figure as it stands. Each rule below is the journal's, not ours." (with your journal's name). Each finding is listed with its fix and repair button. The artwork exports (SVG, PNG, TIFF, PDF, the manuscript ZIP and the repro bundle) stay unavailable, from the buttons and from the ⋮ and ⌘K alike, until you either repair the findings or press the waiver button: "Export anyway — I have read this violation" (or "… these 3 violations", counting the findings).

Exporting anyway records a waiver in the figure. Waivers are listed in amber (for example "2 waived findings — named in preflight.txt and the bundle README") with Withdraw on each. A waiver covers exactly the finding you read: if the figure changes so that the finding is different, or a new finding of the same rule appears, the gate closes again and asks for a fresh acknowledgement. Only errors block; warnings never do. Data (CSV) is never gated. A refused export from the menu or ⌘K shows the gate's reason as a toast.

What you can export

ControlWhat you get
SVGThe composed figure at its real millimetre size, as <figure>.svg
PNG @ the target dpiThe figure rasterised at the target dpi with its resolution written into the file, as <figure>-<dpi>dpi.png
The journal's submission preset boxA line summarising what the journal wants: raster format and dpi, vector format (marked "not written here: convert the SVG" when Figure does not write it), colour mode, smallest type and the file name it expects
TIFF @ the target dpiA baseline TIFF (RGB, PackBits compression, resolution tags) at the target dpi, named for submission (Figure2.tif, or the figure's name when it has no number)
PDF at the width in mmA page exactly the printed size, with the artwork rasterised at the target dpi inside it. It is not vector line art; if your journal needs vector, open the exported SVG in Illustrator or Inkscape and save as PDF from there
All N figures + preflight (ZIP)Every figure in the manuscript: its SVG, its raster (TIFF or PNG, as each journal prefers), its PDF, manifest.json and one preflight.txt. A figure with no panels contributes only its SVG and its section of the report. Named after the figure on screen (<figure>-figures.zip). While writing it reads Writing every figure…
LaTeXA figure float including the PDF, with caption and label, and a comment naming the packages it needs
SubfiguresOne subfigure per panel laid out on your grid, each including that panel's downloaded SVG through the svg package, each with its own label
MarkdownA Pandoc/Quarto image with a cross-reference id ({#fig-…}) and the width in millimetres, pointing at the PNG
CaptionThe caption text
Methods paragraphThe Methods text for this figure's data and analyses. Available once there is an analysis or a data-ledger line. See Figure analysis and statistics
Repro bundle<figure>-bundle.zip: README.md, figure.svg, manifest.json, data.csv (when the figure has rows), data-preparation.txt (when the ledger has steps) and a source/ folder with each panel's engine source
Data (CSV)The rows on the bench as a CSV file, normally dataset.csv. Disabled with no rows
Send to…Shown once there is a panel. Sends the whole composition to another studio as one SVG document, with a conversion preview

The copy buttons read Copied for a moment. LaTeX, Subfigures and Markdown need at least one panel; Caption does not. The snippets point at exactly the file names the buttons save, so a pasted snippet finds its file.

Under the buttons, a paragraph says what the bundle carries for this figure, including how many panels have an engine source, and that everything in it is this figure's own: its rows, its ledger and its analyses. If any panel was drawn from rows that have changed since, an amber note names it and suggests Refresh data first. At the foot of the popover, Data ledger — followed by the figure's name lists the last eight operations recorded on the rows.

The manuscript ZIP and preflight.txt

The manuscript ZIP is gated on every figure, not just the one on screen. If another figure breaks its journal's rules, the button is unavailable and the reason under it names the figures, for example: "Export blocked — 1 of 3 figures breaks the journal's rules. Figure 3: min-font-size." Switch to that figure to repair it.

preflight.txt is a plain-text report a production desk and co-authors can read: for each figure, the settings it was exported at, its findings, any waivers quoted verbatim under "WAIVED BY THE AUTHOR", panels drawn from rows that changed since, and the journal page the rules came from. Its vector line always names the file Figure actually writes ("Vector format: svg — the .svg in this export"); when the journal takes something else, a "Journal takes:" line names the journal's formats and says to convert the .svg (in Illustrator or Inkscape). manifest.json records the same: vectorFormat is "svg", with journalVectorFormats and convertVectorTo. An empty findings list is reported as "No rule fired. That is not the same as correct": the checker measures size, type, resolution, format and colour separation, not the science.

The reproducibility bundle

The README lists every file and says how to redraw the figure: run each file in source/ against data.csv, and re-compose at what manifest.json records. It says plainly how many panels carry a source (a pasted SVG and a statistical panel have none, and travel as artwork only), names waivers, and names panels drawn from rows that have changed. In data.csv and the Data CSV export, a text cell that begins with =, +, -, @, a tab or a carriage return gets a leading apostrophe so a spreadsheet opens it as text rather than running it as a formula; numbers are never changed.

File names

FileName
SVG, repro bundleFrom the figure title, lower-cased and hyphenated (monthly-revenue-by-region.svg); an untitled figure uses its number (figure-3) or figure
PNG<figure>-<dpi>dpi.png
TIFF, PDF, and files inside the manuscript ZIPFigure<number> when the figure has a number, otherwise from the title
Panel SVGs<figure>-panel-<letter>.svg, unique even when two panels share a letter

Sending the figure on

DestinationHowWhat arrives
Studio, Weave, Lab, BPMN, Science⋮ → Send to ▸, or Send to… in the Export popoverThe composed figure as SVG. A studio that needs its own notation gets a converted copy; converting SVG uses AI (your own key or AI points). See Moving work between studios
EvidenceThe same menusAn evidence scaffold from the figure
Study⋮ → Send to ▸ → Study this figure, or ⌘KThe figure's story rather than its artwork: title, caption, panel captions, each analysis and the Methods paragraph, from which Study builds a course. The toast reads "Sent to Study — it will build a course from this figure"

Figure itself cannot receive diagrams from the Send to menus of other studios; it receives datasets (see Rows from other studios).


The Figure analyst

The prompt at the bottom of the canvas, Ask the flowss Figure Agent…, opens a sheet titled flowss Figure Agent — Figure analyst with two tabs. Enter sends, ⇧Enter adds a line, Escape closes the sheet. Typing in the prompt sends your request to the AI chat tab.

PartWhat it is
Suggestion chipsOver an empty figure on the Figure view, up to three of the Advisor's next moves appear above the prompt. Press one to do it. The cross hides them
AI settings (the settings button on the prompt)Research discipline and its Field notes. The discipline orders the Advisor's suggestions and its preferred charts
Advisor tabDeterministic next moves from your data, analyses, composition and the journal check. No AI, works offline, same answer every time
AI chat tabThe flowss Figure Agent, working as the platform's tool-using Data & charts specialist, writing real chart source against your rows
Tune for a disciplineOffered when your column names suggest a different discipline; never imposed

The disciplines are General research, Medicine & clinical research, Public health & epidemiology, Biology & life sciences, Psychology & behavioural science, Engineering & materials, Physics, Chemistry, Environmental science, Business & marketing analytics, Economics, Social science & survey research, and Data science & machine learning.

The Advisor

The Advisor shows up to ten cards, each labelled with its area (Data, Clean, Analyse, Chart, Compose or Check), a title and a detail line. A card with an action has Do it (it reads Working… while running). It proposes, in order: up to three cleaning fixes, up to four analyses your columns support (a comparison of groups is always the assumption gate's pick, with the reason, and a sheet whose only numbers are counters says "No measured column to test yet"), two recommended charts ("Draw:" and the chart), composition gaps (no panels yet, or Generate the figure legend when there is no caption), and up to three blocking findings with their repairs (for a dpi finding, "Raise export resolution to" the line-art dpi) or a "no one-click fix" note. When it has nothing to propose it says so, and says that silence is not a pass. See Figure analysis and statistics.

The AI chat

The flowss Figure Agent works on the selected panel's source. With no panel selected, it starts from a chart scaffold carrying up to 150 of your rows (fewer if they are large, as few as ten), and it is told exactly how many rows it has, so it does not state totals for rows it never saw. Whatever comes back is re-rendered and cleaned before it becomes a panel: it replaces the selected panel, or becomes a new panel when none is selected, and the canvas switches to the Figure view. Revert this run ("Undo everything this run changed") takes a run back; for a run that created a panel, that panel is removed. The chat offers examples such as "Chart the strongest relationship in this dataset", "Grouped bar chart with the y-axis starting at zero, units in the label" and "Restyle the selected panel for print: bigger type, colour-blind-safe palette". A chart the AI rewrote drops its data link, so Refresh data no longer applies to it.

AI needs your own key (Starter) or hosted AI points (Plus and up). See AI points and limits and Bring your own AI key.


Saving, syncing and history

TopicDetail
AutosaveEvery change is saved in this browser about 0.4 seconds after you pause, and again when you leave the page or close the tab
What is savedThe composition, the whole project with every figure, and each figure's analysis bench
Other devicesPicked up by your workspace sync. See Cloud sync, offline work and devices
CheckpointsOpen the Flow Dock with ⌘J to save a named Vault checkpoint of the whole project. See Version history and undo
The LibraryEach figure that holds work is a card in the Library, with the composed figure as its thumbnail. Opening the card opens that figure in Figure. Renaming the card renames the figure, and renaming the figure renames the card. Duplicate makes a separate figure. Deleting a figure in Figure moves its card to the Library's trash, and trashing or purging the card in the Library removes the figure the next time Figure opens. A version restored from the card's history is carried back into Figure. Library backups include your figures
Undo50 steps of data changes (while the table is up) and 50 of composition changes (while the figure is up). Typing in a caption is not an undo step; a run of edits to one number field is one step. Switching figure clears both histories
Two tabsIf the project is changed in another tab or synced from another device, a warning says to reload, because this tab's next save would otherwise overwrite it
Warning: If storage fills up, the badge turns to Not saved ("Storage is full — export to keep this work"). Export the repro bundle or the manuscript ZIP straight away, then free space by deleting figures you no longer need or very large images.

Keyboard shortcuts

KeyAction
VSelect (puts the Hand down)
HHand tool on or off
Space (hold)Pan while held
+ or = / -Zoom in / out
0Zoom to 100% (true print size)
1Zoom to fit
GColumn guides
RMillimetre rulers
PColour-vision proof
← / → with a panel selectedMove it earlier / later
← / → on the span handleOne column narrower / wider
Delete or BackspaceRemove the selected panel
EscapeClear the selection
Arrow keys with an annotation selectedNudge 0.1 mm (⇧ for 1 mm)
⌘Z / ⇧⌘Z (or ⌘Y)Undo / redo the table or the composition, whichever is showing
⌥⌘← / ⌥⌘→Previous / next figure
⌥↑ / ⌥↓ on a switcher rowReorder figures
⌘KEvery command and screen
⌘JThe Flow Dock
⌥ZHide the interface (Escape or ⌥Z brings it back)

Canvas keys are ignored while you type in a field. See Keyboard shortcuts.


Tips

  • Pick the journal first. The width, the target dpi, the panel letters and the type size a new chart is drawn at all follow it.
  • Use the line art dpi for anything with axes or lettering; the halftone dpi is only for figures that are entirely photographic.
  • Give each figure a Number before the final export, so the TIFF and PDF are named Figure1.tif and so on, the way submission systems expect.
  • Turn on Column guides (G) and Align panels on their data regions for multi-panel time courses; the y axes then start at the same place.
  • Use One shared colour key rather than a legend in every panel.
  • Run the Colour-vision proof (P) before you send a figure out; it shows the same simulation the Check report measures.
  • Prefer computed brackets from the Analyse bench to typed significance marks: a computed bracket can never print a p its test did not produce.
  • Keep a Vault checkpoint before a risky change, and export the repro bundle with every submission.

Limits and known constraints

LimitValue or behaviour
PlanStarter and above
Figures per project12
Rows and columns200,000 rows, 256 columns
Rows saved in this browserUp to about 750,000 characters of data per figure; more is kept for the session only
Rows handed in from another studioAbout 600 KB of text
Image panelsPNG, JPEG, GIF, WebP; 12 MB each
Grid1 to 6 columns; gutter 0 to 20 mm
CropUp to 45% off each side
PNG, TIFF and PDF sizeLimited by what a browser canvas can hold (about 268 megapixels, and 65,535 pixels on a side). SVG has no resolution limit
PDFRaster inside a page of the printed size, not vector line art
EPSNot written. Convert the SVG yourself where a journal requires EPS. Because none of the eight journal presets accepts SVG, a figure set to a real journal carries a vector-not-produced warning by default. It is advisory and never blocks: submit the TIFF, or convert the SVG
CMYKNot written. Every file is RGB; convert in a colour-managed application with the journal's profile
AnnotationsPositioned by nudging; not draggable on the canvas
Pasted SVG, images and statistical panelsCannot be restyled or refreshed from new data. Pasted SVG and statistical panels carry no source at all
CollaborationNo live sessions, comments or share links in Figure
LibraryEach figure is a Library card. When you are signed in, figure cards are synced after every other studio's Library documents, within the Library's sync budget. A figure whose card did not sync appears on your other device, as the same card, the first time you open Figure there
Undo50 steps each for data and composition; cleared when you switch figure

Troubleshooting

You seeWhyWhat to do
"No rows found — is the first line a header?" or "Couldn't parse: …"The text could not be read as a tableMake sure the first line is a header and the rows are delimited consistently
"Invalid JSON: …", "This JSON is a single value, not a table." or "The JSON array is empty — no rows to chart."The JSON is malformed or holds no rowsSupply an array of row objects
"This JSON is an object, not a table — expected an array of row objects (or {data: [...]})."JSON in the wrong shapeSupply an array of row objects, or wrap it under data, rows, values or records
"That's N rows — the limit is 200,000. Take a sample or aggregate first."Too many rowsSample or aggregate before importing
"N columns — the limit is 256."Too many columnsReduce the columns
"That file could not be read: …"The browser could not read the fileTry the file again, or paste its contents
"That doesn't look like an SVG — paste a complete <svg>…</svg> document."The pasted text has no SVG rootPaste the whole SVG document
"No browser draws TIFF inside a figure…" (or HEIC, a Photoshop document, a raw file)The format cannot be embeddedConvert to PNG or JPEG
"…over the 12 MB a panel can hold…"The image is too largeDownsample to the pixel width the journal needs
"That file's pixel dimensions could not be read from its header…"The image header is unreadableRe-save it as a plain PNG or JPEG
"Error bars need one row per group…"Repeated group rows on an error-bar chartPress the Summarise … as mean ± SEM button, then generate again
"Refused: …. The panel is untouched."A data refresh would break the chartFollow the reason: restore the missing column, or redo table edits on the new rows and chart again
"A shared key is read from a chart's own source; this figure has no Vega-Lite panel."No chart panel to read a key fromDraw a chart panel from your data first
"The key was added, but … the figure now shows the key twice"A panel could not be redrawn without its own legendHide that panel's legend in Style, or remove the key panel
"The key uses Vega-Lite's default categorical colours, because that panel names none of its own…"The chart sets no colours of its own, so the key used the renderer's defaultsCompare the key with the panel before submitting, or set a palette in Style and add the key again
Export blocked with a rule countA blocking rule firesPress each repair, fix by hand, or press the Export anyway button to record a waiver
"Export blocked — 1 of 3 figures breaks the journal's rules. …"Another figure in the manuscript breaks a ruleSwitch to the named figure and repair it
"… megapixels, past the 268.4 a browser canvas can hold…" or "The browser refused to encode a … canvas"The figure is too large at this dpi for a rasterExport SVG, or lower the target dpi to the number suggested
"Clipboard blocked — copy from the preview instead."The browser refused clipboard accessAllow clipboard access for the site, or copy by hand
"A project holds 12 figures — export or remove one before adding another." (or "… remove one before duplicating.")The project is fullDelete a figure you no longer need
A toast saying a chart, fit or run "was for" another figure and "was not applied"The work finished after you switched figureSwitch back and try again
"This figure project was changed in another tab or synced from another device…"Two tabs, or a sync, changed the projectReload before you make more changes
Not saved in the badgeBrowser storage is fullExport now, then free space
"Nothing to study yet — give the figure a title, a legend or an analysis first."Study this figure had nothing to sendAdd a title, caption or analysis
"Couldn't stage the figure (storage full)."Browser storage could not hold the hand-off to StudyFree space, then try again
The Chart button is disabled ("Bring data in first")There is no dataBring data in first

Something unclear or out of date on this page? Tell us from the Support link in any studio — the flowss team reads every report.

© 2026 Voranox Inc. flowss — Flow Systems Studio. All rights reserved.

This documentation, its text and its examples are protected by copyright. Engine and format names are trademarks of their respective owners — see the terms and copyright and licences.