How to Make a Histogram in Google Sheets (3 Ways)
August 6, 2026
Google Sheets will make you a histogram in about four clicks, and then hide the one setting you actually need. The bucket controls are real but they sit in a panel most people never open, so the first chart you get back is usually the wrong shape.
This walks through the three ways that work in Sheets, where the bucket settings live, and how to tell when the chart is lying to you.
What the data has to look like first
A histogram needs one column of raw numbers. One value per row, nothing summarized. Put a label in the top cell like "Value" so Sheets names the axis, then list every data point underneath it.
This trips people up more than anything else in Sheets. If your data already looks like "0-10: 14 items, 10-20: 22 items", that is a frequency table, not raw data, and the histogram chart will not read it the way you expect. It will treat your counts as the values. If that is what you have, you want a column chart instead, and the frequency distribution table page explains the difference properly.
Blank cells are fine and get skipped. Text mixed into a number column is not, and Sheets will silently drop those rows rather than warn you.
Method 1: the built-in histogram chart
This is the fastest route and the one most people want.
Select your column of values, header included. Go to the Insert menu and choose Chart. Sheets drops a chart on the sheet and opens the Chart editor panel on the right. It will usually guess wrong and give you a column chart or a line chart.
In the Chart editor, on the Setup tab, open the Chart type dropdown. Scroll down to the Other section and pick Histogram chart. The chart redraws with automatic buckets.
Those automatic buckets are the part to fix. Switch to the Customize tab in the Chart editor and open the Histogram section. There you get:
- Bucket size. The width of each bar, in the units of your data. This is the setting that matters most.
- Outlier percentile. Gathers the most extreme values into the end buckets so one stray point does not stretch the whole axis.
- Show item dividers. Draws a line for each individual data point inside its bar. Useful on small datasets, noise on large ones.
Set the bucket size to a round number that suits your data, not whatever Sheets picked. Bucket width changes the shape a histogram shows, and the shape is the entire reason you made it. Too wide and you flatten real structure into one smooth lump, too narrow and you shatter it into spikes that mean nothing. The walkthrough on how many bins a histogram should have covers how to land on a defensible number, and how to choose bins is the short version.
One quirk worth knowing: Sheets sets bucket size, not bucket count. Excel lets you do either. If you are used to saying "give me 12 bins", you have to divide the range by 12 yourself and enter that as the bucket size.
Method 2: a COUNTIFS frequency table
Sometimes you want the numbers, not just the picture. Building the frequency table by hand gives you a table you can cite, sort, and paste into a report.
Set up two columns for your bucket edges, say a lower bound in column D and an upper bound in column E, then count with COUNTIFS:
=COUNTIFS($A$2:$A$500, ">="&D2, $A$2:$A$500, "<"&E2)
Note the >= on the lower edge and the plain < on the upper. That combination is what keeps a value sitting exactly on a boundary from being counted twice. Getting this wrong is the most common error in a hand-built frequency table, and it shows up as a total that does not match your row count.
Always check the total. Sum your count column and compare it to =COUNT(A2:A500). If the two do not match, either your buckets have a gap between them or your top bucket is cutting off the largest value. Extend the last upper bound past your maximum.
Once you have the table, select both the label and count columns, insert a column chart, and set the gap width to zero in the Customize tab so the bars touch. Bars touching is what visually distinguishes a histogram from a bar chart, and the reason for that is covered in histogram vs bar chart.
Method 3: the FREQUENCY array formula
Sheets has a dedicated FREQUENCY function that fills the whole count column at once.
Put your bucket upper bounds in a column, say C2:C11, then in a single cell:
=FREQUENCY(A2:A500, C2:C11)
Sheets spills the results down automatically, no need for the Ctrl+Shift+Enter that older Excel required.
Two things to know about FREQUENCY. It returns one more row than you have bucket bounds, because the final row catches everything above your highest bound. And its buckets are inclusive of the upper edge, which is the opposite convention from the COUNTIFS approach above. A value landing exactly on a boundary goes into the lower bucket with FREQUENCY, and into the upper bucket with the >=/< COUNTIFS pattern.
That is not a bug in either one, but you have to pick a convention and state it, especially if someone else will read the table.
The three methods compared
| Speed | Gives you a table | Bucket control | |
|---|---|---|---|
| Built-in histogram chart | Fastest | No | Bucket size only |
| COUNTIFS table | Slowest | Yes | Full, any edges you want |
| FREQUENCY formula | Fast | Yes | Full, upper bounds only |
If you just need to see the shape, use the built-in chart. If you need to report the numbers or use uneven bucket widths, build the table.
Where Sheets falls short
Two limits are worth naming before you spend an afternoon fighting them.
Sheets will not do uneven bucket widths in the built-in histogram chart. Every bar is the same width, full stop. Real data sometimes wants uneven buckets, income brackets being the obvious case, and for that you have to build the frequency table by hand and chart it as a column chart.
Sheets also does not report skewness or kurtosis next to the chart, so you cannot see at a glance whether what you are looking at is genuinely lopsided or just noisy. There is a SKEW function you can call separately, but it is not part of the chart.
The faster way
If the point is to see the distribution rather than to keep a live spreadsheet, pasting the numbers straight into a maker skips all of the above. The histogram maker takes a pasted column, picks a sensible bin count, and reports the mean, median, and skew alongside the chart, so you can tell immediately whether the shape is right-skewed, left-skewed, bimodal, or roughly symmetric.
That last part is what Sheets makes hardest. A chart on its own does not tell you which average to report. Once a clear tail shows up, the mean stops describing the middle and the median takes over, and knowing that is usually the reason the histogram was worth making. The full set of shapes covers what each pattern means and what to do about it.
For a Sheets-native workflow that has to stay in the sheet, methods 2 and 3 are the ones to keep. For a one-off look at the data, paste it in and move on.
Common questions
Does Google Sheets have a histogram chart? Yes. Insert, then Chart, then change the chart type to Histogram chart under the Other section. The bucket controls live on the Customize tab under Histogram.
How do I change the bin size in Google Sheets? Open the Chart editor, go to Customize, expand the Histogram section, and set Bucket size. Sheets sets bar width rather than bar count, so to get a specific number of bins, divide your data range by that number.
Why does my Google Sheets histogram look wrong? Almost always one of three things: the data is already summarized into counts rather than raw values, the bucket size is at its automatic default, or text values in the column are being skipped.
Can Google Sheets make a histogram with uneven bins? Not with the built-in histogram chart, which forces equal widths. Build a frequency table with COUNTIFS and chart it as a column chart with zero gap width instead.
What is the difference between FREQUENCY and COUNTIFS for this? FREQUENCY fills the whole count column from one formula and counts the upper edge as inside the bucket. COUNTIFS is written per row and, with the >=/< pattern, counts the lower edge as inside. Both are correct as long as you are consistent.