Histogram Maker
Make a histogram from numbers or a CSV column. Export charts and audited bin counts.
This tool processes its input contents in your browser instead of sending them to a processing service. Page, asset and fixed usage-measurement requests are described on the Privacy page.
Group numeric observations into checkable equal-width bins and retain a local chart, frequency table or complete analysis.
How to use it
- 1Paste numbers, or open CSV and select one numeric column.
- 2Use automatic bins or choose 1–100 bins, then create the histogram.
- 3Review count or relative frequency and the explicit interval table.
- 4Download SVG, PNG, bin CSV or analysis JSON.
Example
- Input
- 0, 1, 2, 3, 4 with two bins
- Output
- [0, 2): 2; [2, 4]: 3.
The final upper edge is included. Constant data use one closed bin.
What happens to your data
Observations and files stay in tab memory. Chart and data exports are generated locally. Fixed optional analytics labels exclude values, column names and filenames.
Last updated November 2026
A histogram groups observations into numeric intervals so you can see where values concentrate and where the gaps lie. Paste a number list or choose one numeric CSV column, then create the chart in your browser. The bin table and exports keep the boundary rules visible instead of leaving you to guess how an observation was counted.
Use automatic bins as a starting view or choose 1–100 equal-width bins. Retain the chart as an editable, script-free SVG or a 2000 × 1120 PNG, and keep exact computed boundaries and counts in CSV or JSON.
How it works
For nonconstant data, the full observed range from minimum to maximum is divided into k equal-width intervals. Every interval includes its lower edge and excludes its upper edge: [lower, upper). The final interval includes the maximum as well: [lower, upper]. A value on an internal boundary belongs to the bin on its right. Assignment compares observations with the actual computed boundaries using a bounded binary search; it does not rely on a rounded displayed label or silently clip values outside a display range. Every accepted observation is counted exactly once.
Automatic mode uses k = min(100, 1 + ceil(log2(n))), a specified Sturges-style convention. Manual mode accepts an integer from 1 to 100. Neither mode proves that a distribution is normal or identifies an objectively best number of bins; changing k can reveal or hide apparent patterns. If all observations are identical, the result uses one closed bin [x, x] with zero numeric width, regardless of the requested count. If distinct bin boundaries collapse at browser precision, the calculation is rejected: reduce the bin count or rescale at the original source.
Count is the number of accepted observations in a bin. Relative frequency is count/n, displayed as a percentage. Cumulative count is the number of observations up to and including that bin. These are counts and proportions, not probability density: dividing by bin width would be an additional normalization. The chart can switch between count and relative-frequency axes without changing bin membership. Its ticks are rounded labels; CSV and JSON retain the actual computed numeric edges.
Both tools use decimal-point numbers, optionally in e notation, with at most 200 characters per numeric token. Nonzero magnitudes must be from 1e−100 to 1e100. Infinity, NaN, arithmetic expressions, units and grouping marks are rejected. A decimal whose normalized spelling cannot survive a round trip through a browser number is rejected rather than silently losing input digits. This does not make numbers exact decimals: 0.1 still has a binary approximation. Input is limited to 1 MiB of valid UTF-8, 10,000 list values or pairs, or 10,000 CSV records including the header, under shared 200-column and 200,000-cell guards. Local files must be nonempty. CSV needs a header row with unique, nonblank names and consistent field counts. Choose comma, semicolon or tab explicitly, select the numeric columns, and decide whether blank selected cells must be rejected or omitted. Non-numeric selected cells are always rejected with a source record number. Omitted CSV records are counted; unrelated text columns are not analyzed. In number-list mode, commas and whitespace separate values: 1,234 is two observations, 1 and 234. Enter 1234 for one thousand two hundred thirty-four.
SVG is generated from finite numeric values and fixed labels; it has no script, external image or web-font dependency. PNG is rendered locally from the SVG at 2000 × 1120 pixels. The preview scales to the page width, so use the table or downloaded chart for small labels. Bin CSV includes interval bounds, final-edge inclusion, counts, relative frequencies and cumulative counts. JSON also retains original source record numbers, accepted observations, omitted count and the bin method. Browser binary64 arithmetic is approximate, and bin-edge choice can matter for values extremely close to an edge. Large inputs trigger a visible precision reminder.
Inputs stay in browser-tab memory: no dataset upload, stored history or data in the URL. Editing data or calculation settings removes stale results and exports. Optional analytics uses fixed action labels and input mode, never numeric values, filenames or column names. JSON downloads deliberately contain the accepted input observations and calculation settings so you can retain an audit locally; share them only when appropriate.
Worked example: Internal edges go to the right-hand bin
- Input
- Values: 0, 1, 2, 3, 4; manual bins: 2
- Result
- [0, 2): 2 observations; [2, 4]: 3 observations. Relative frequencies: 40% and 60%.
2 belongs to the second bin; the final upper edge includes 4. No observation is dropped.
Common use cases
- Inspect the distribution of durations, measurements or test observations before choosing a more detailed analysis.
- Turn a numeric CSV column into a chart while explicitly handling blank records.
- Prepare a local SVG chart and a checkable frequency table for a report.
- Compare how different bin counts change the appearance of the same dataset.
Frequently asked questions
Where does a value exactly on a bin boundary go?+
An internal boundary belongs to the bin on its right. Each bin is [lower, upper), except the final bin includes its upper edge so the maximum is retained. The table and exported upper_inclusive field state the rule.
What happens if every number is the same?+
The result uses one closed interval [x, x] with all observations. Its numeric width is zero. It is a constant-data summary, not a density estimate.
Is automatic binning always the best choice?+
No. This tool specifies 1 + ceil(log2(n)), capped at 100, as a starting rule. A histogram's appearance depends on bin choice. Compare multiple counts and use domain knowledge before drawing conclusions.
Is relative frequency the same as probability density?+
No. Relative frequency is count divided by the total number of observations. Density additionally divides by interval width. This page provides counts and relative frequencies.
Can I export the chart without uploading my data?+
Yes. SVG, PNG, bin CSV and analysis JSON are generated in the current browser tab. The JSON intentionally includes the accepted observations for your local audit.
Standards and limitations
Related tools
Standard Deviation Calculator
Analyze a list or CSV column with sample/population spread, quartiles, outlier flags and exports.
Weighted Average Calculator
Calculate a weighted mean from value–weight pairs, with normalized shares and CSV reports.
Linear Regression Calculator
Fit paired data or CSV columns, inspect residuals and estimate values with clear local exports.
CSV Data Profile
Inspect CSV column counts, empties, distinct values and duplicate rows locally; export a JSON profile.