Scientific Plot Maker

Plot individual observations with explicit mean or median summaries, journal sizing and local projects. Switch between Dot, mean Bar, Box and Violin views of the same raw observations, with numerical R code and Methods text.

Loading the plot editor…

Examples

Plant biology · 3 groups of 10

Plant growth under two treatments

Dried weights of 30 plants: a control and two treatments, 10 plants each (PlantGrowth, Dobson 1983).

View worked example
Illustrative · long format

Unequal groups in a long table

Illustrative raw measurements in Group and Value columns, with unequal group sizes.

View worked example
Illustrative · missing values

Missing and signed measurements

Illustrative negative, zero and positive observations with an explicit missing marker.

View worked example
Botany · 3 groups of 50

Petal length of three iris species

Petal lengths of 150 iris flowers, 50 per species (R iris; Anderson 1935, Fisher 1936), opened as violins.

View worked example
Environmental science · missing values

Daily ozone by month, New York 1973

Daily ozone readings May–September 1973, unrecorded days as NA (R airquality), opened as violins.

View worked example

Choose a tool for your data

Use this editor to summarize individual observations. If you already have category values, use theBar and Column Chart Maker. For a dedicated quartile view, useBox Plot Maker; for numeric X–Y pairs, useScatter Plot Maker; for a binned distribution, useHistogram Maker.

How to plot your raw observations

  1. Paste your table into the data box (copy the cells in Excel or Google Sheets and press Ctrl+V), or drop an .xlsx or CSV file on it. No data yet? Download an Excel template from the data box.
  2. Check “How we read your table” above the figure: the groups and their number of values, missing cells, header rows, decimal mark, and every cell that was left out. Change anything that is wrong.
  3. Click Confirm. Until then the figure is marked “Preview”, and export and saving are off.
  4. Choose Dot, Bar, Box or Violin and the summary under “2. Plot & summary”: mean ± SD (the default), mean ± SEM, mean with 95% CI or range, or median with interquartile range or range. Box uses fixed type-7 quartiles and observed 1.5-IQR whiskers. Violin draws a Gaussian kernel density with R’s bw.nrd0 bandwidth; set the bandwidth, scale, inner box and points under “Violin appearance”. The table below it lists each group’s numbers; copy it or download it as CSV.
  5. Export a vector PDF or SVG, or a PNG or TIFF at the resolution you need, and copy the sentence under the figure (“Dots are individual values; lines show …”) into your figure legend.
  6. Reproduce and document. Choose R code to download a base-R script for the current numerical summaries, or Methods text for an editable description. Run the script locally if needed; R does not run in your browser. Editing the figure closes previously generated output.

Worked previews use fresh defaults (Dot, or Violin for the violin examples). Loading an example keeps your editor’s chosen size, style and mode, except that violin examples open in Violin (the iris example with points hidden); Undo restores the work it replaces. Numerical summaries are checked against R stats. Seehow we verify the numbers and theR type-7 quantile definition. Box whiskers use observed values within the inclusive 1.5-IQR fences; the hinges in base R boxplot.stats can differ.

Data format

Use one column per group, with the group name in the first row. Groups may have different numbers of values.

ControlTreatment 1Treatment 2
4.174.816.31
5.584.175.12

A long table with a Group column and a Value column works as well. A second header row with a unit (for example “mg/L” under every name) becomes the axis title; a title in the first cell above the table is skipped; Mean, SD and n rows below the data are proposed for leaving out. Up to 20 groups can be drawn.

Frequently asked questions

Which tool should I use for bar charts?

Use Scientific Plot for individual observations when you want group means with SD, SEM, a t confidence interval or range. Use Bar and Column Chart Maker when you already have category values to draw. Scientific Plot does not treat a supplied mean or SD as an individual-data summary table.

Can I reproduce the summaries in R?

After confirming a valid figure, choose R code and download the .R file. Run it locally in base R (4.0 or later). It contains the accepted observations, group order and source cells, and defines cleanfigure_result with the numerical summaries. It does not recreate the artwork, install packages or write files. Methods text describes the current mode, summary, exclusions and display; generating either output does not execute R.

Why show every data point?

A bar of means hides how many values there are and how they are spread. With small samples (n ≤ 9) journals such as PLOS Biology discourage bar graphs and ask for the individual values, so readers can see outliers, gaps and group sizes.

What does a violin plot show?

Each violin is a smoothed outline of where a group’s values lie: wider where values are common, narrow where they are rare. CleanFigure draws a Gaussian kernel density, computed as the exact kernel sum at 512 points between the group’s lowest and highest value, so the outline never extends past the data. A narrow type-7 box and the individual values are drawn inside by default. Violin uses a linear axis and supports up to 3,500 accepted observations.

How is the violin bandwidth chosen?

By default each group uses R’s bw.nrd0 rule (Silverman’s rule of thumb), the same default as R density() and ggplot2 geom_violin. Adjust multiplies it (0.25 to 4): smaller values show more detail and noise, larger values a smoother outline. You can also type a bandwidth in data units. The summary table lists every bandwidth, and the sentence under the figure and the Methods text state the rule, so you can report it.

Why does my violin differ from Prism or seaborn?

Different software uses different defaults. GraphPad Prism offers smoothing levels without a documented numeric bandwidth, and seaborn uses Scott’s rule and extends tails past the data. CleanFigure follows R: bw.nrd0, outlines trimmed to the data range, and equal area by default, as ggplot2 does. R density() uses a fast binned approximation, so its values typically differ from the exact sum by less than 0.1% of the peak density.

When is a sample too small for a violin?

With fewer than 10 values an outline mostly reflects the bandwidth rather than the data, so CleanFigure always shows the individual values in such groups and notes it under the figure. A group with one value shows just that point; a group whose values are all equal shows its points without an outline. For small samples a Dot plot is often clearer.

Equal area, area proportional to n or equal width?

Equal area (the default, as ggplot2) gives every violin the same area, so shapes are comparable. Area proportional to n scales each violin by its sample size, which shows which groups have more data. Equal maximum width makes every violin equally wide, which helps compare shapes when one group is much more concentrated than the others.

What does Box mode show?

The box spans type-7 Q1 to Q3, with a line at the median. Whiskers end at observed values within 1.5 times the IQR of Q1 and Q3. Outliers always remain in the data and axis range. Show all observations or only outliers; singleton observations are always shown. Box uses a linear axis and supports up to 3,500 accepted observations. These quartiles need not equal base R boxplot.stats hinges.

What does Bar mode show?

Each bar starts at zero and shows its group’s mean. Choose SD, SEM, a 95% t confidence interval or the observed minimum–maximum range; individual observations are shown by default. Group labels show sample sizes. A singleton has a mean but no estimable error interval. Bar mode uses a linear axis and supports up to 3,500 accepted observations; Dot remains available for larger tables.

How is my table read?

Each column with numbers becomes a group (or, with a Group column and a Value column, each group name does). The card “How we read your table” shows the groups, their number of values and missing cells, the header rows, the decimal mark and every cell that was left out, with its row. You can change any of these, and you confirm the reading before you export.

What happens to blank cells, NA and #N/A?

They are missing values: counted per group and listed, never turned into 0. Text in a number column, such as “<0.1” or “12 mg”, is left out and listed with its row; it is never converted into a number.

Does it read decimal commas?

Yes. “12,5” is read as 12.5, and semicolon CSV files from European Excel work. When every value looks like “1,250”, which could be 1.25 or 1250, the tool asks which one you mean.

Should the error bars show SD, SEM or a 95% CI?

They answer different questions. SD (n − 1) shows how spread out the values are. SEM (SD/√n) and the 95% confidence interval (t distribution, as R’s t.test) show how precisely the mean is estimated, and shrink as n grows. Say which one you show in the legend; the sentence under the figure does this for you. The numbers match R to nine significant digits; quartiles use R’s default (type 7, as Excel QUARTILE.INC), which can differ slightly from GraphPad Prism.

Why does a group name show #NAME? in Excel?

Group names are written to the summary CSV and the copied table exactly as you typed them, so a name starting with “-”, “+”, “=” or “@” (such as “-LPS”) may show as a formula error (#NAME?) in Excel. Renaming the group fixes both; a CSV file can also be imported with Excel’s Data › From Text/CSV, which keeps the name as text.

Is my data uploaded anywhere?

No. Pasted tables and opened Excel or CSV files are read in your browser, and the figure is drawn there too. Nothing is sent to a server.

Are p-values computed?

No. This tool draws your data; it does not choose or run statistical tests.