To make a histogram from a frequency table, you plot each class (or bin) along the horizontal axis and draw bars whose heights match the frequency counts in your table. The bars touch each other with no gaps, which is what distinguishes a histogram from a regular bar chart. The process works the same whether you’re drawing on graph paper, using Excel, or working in Google Sheets, but the details at each step matter if you want an accurate, readable chart.
Understand Your Frequency Table First
A frequency table groups numerical data into classes (also called bins or intervals) and counts how many values fall into each one. A typical table might look like this:
- 10–14: 2
- 15–19: 3
- 20–24: 5
- 25–29: 7
- 30–34: 1
Before you start drawing anything, check two things. First, confirm that every class has the same width. In the example above, each class spans 5 units. Equal widths keep the histogram honest because the area of each bar is proportional to its frequency. Second, note whether your table uses whole numbers with gaps between classes (like 10–14, 15–19) or continuous ranges (like 10–<15, 15–<20). This affects how you label the axis later.
Class Limits vs. Class Boundaries
The numbers written in your frequency table are called class limits. In the table above, the class 10–14 has a lower limit of 10 and an upper limit of 14. But there’s a gap between 14 and 15, and histogram bars aren’t supposed to have gaps. That’s where class boundaries come in.
Class boundaries sit halfway between the upper limit of one class and the lower limit of the next. For the 10–14 class, the boundaries are 9.5 to 14.5. For 15–19, they’re 14.5 to 19.5, and so on. When you draw the histogram, you use these boundaries as the edges of each bar so they line up seamlessly. If your frequency table already uses continuous notation (like 10–<15), the boundaries are built in and you don’t need to calculate anything extra.
Drawing a Histogram by Hand
Start by drawing your two axes. The horizontal axis (x-axis) represents the variable you measured, and the vertical axis (y-axis) represents frequency.
Mark the class boundaries along the x-axis at even intervals. Using the example, you’d place tick marks at 9.5, 14.5, 19.5, 24.5, 29.5, and 34.5. Then set up the y-axis so it comfortably covers your highest frequency. Here, the tallest bar will reach 7, so a scale from 0 to 8 works well.
For each class, draw a rectangle that stretches from the lower boundary to the upper boundary and rises to the frequency count. The bar for 10–14 runs from 9.5 to 14.5 and reaches a height of 2. The bar for 25–29 runs from 24.5 to 29.5 and reaches 7. Because the boundaries of adjacent classes share the same value (14.5 is both the end of one bar and the start of the next), the bars touch with zero gap.
Labeling the X-Axis
There are two standard ways to label the horizontal axis, and both are correct. The first places the lower boundary (or lower limit) of each class at the left edge of its bar. So you’d see 9.5, 14.5, 19.5, and so on directly beneath the bar edges. This is the most common approach in textbooks and professional reports because it clearly shows where each interval starts and ends.
The second approach labels the midpoint of each class, centered under each bar. The midpoint of the 10–14 class is 12, for 15–19 it’s 17, and so on. Midpoint labeling looks cleaner when you have many classes, but it can make it harder for readers to see exactly where the intervals begin and end. Pick whichever style your course or audience expects, and stay consistent.
When Your Classes Have Unequal Widths
Sometimes a frequency table groups data into intervals of different sizes. You might see 0–9, 10–19, and then 20–49. When this happens, bar height alone is misleading because the wider class covers more ground and naturally collects more values.
The fix is to plot frequency density instead of raw frequency. Frequency density equals the frequency divided by the class width. If the 20–49 class has a frequency of 30, its width is 30 units, so its frequency density is 30 ÷ 30 = 1. A narrower class like 0–9 (width of 10) with a frequency of 15 gets a density of 15 ÷ 10 = 1.5. Now the bar heights reflect concentration rather than raw count, giving you an honest visual comparison across unequal classes. The y-axis label changes from “Frequency” to “Frequency Density” when you do this.
Creating a Histogram in Excel
Excel offers a couple of ways to build a histogram from a frequency table, depending on whether you have the original raw data or only the summarized counts.
If You Have Raw Data
Use the Data Analysis Toolpak. Go to the Data tab, click Data Analysis, and select Histogram. In the dialog box, point the Input Range to your raw data and the Bin Range to a column where you’ve listed the upper boundary of each class. Check the “Chart Output” box and click OK. Excel will generate both a frequency table and a histogram. The default chart has gaps between bars, so right-click on any bar, choose Format Data Series, and set the Gap Width to 0%.
To set up your bins correctly, decide on a class width first. A common formula is to take the range of your data (maximum minus minimum) and divide by the number of classes you want. If your data runs from 11 to 100 and you want 6 classes, that’s (101 − 11) ÷ 6 = 15. Start at your minimum value and keep adding 15 to create each bin’s upper boundary: 26, 41, 56, 71, 86, 101.
If You Only Have the Frequency Table
When you don’t have the raw data and only have class labels with their frequency counts, the Toolpak won’t help. Instead, select your frequency column and insert a standard bar chart (Insert > Charts > Bar Chart or Column Chart). Then manually adjust it to look like a histogram: set the Gap Width to 0%, relabel the x-axis categories with your class intervals, and add an axis title. It’s a workaround, but the visual result is identical.
Creating a Histogram in Google Sheets
Google Sheets has a built-in histogram chart type, but it expects raw data and automatically picks its own bins. If you’re starting from a frequency table, the easier route is to select your class labels and frequencies, insert a column chart, and then customize it. In the Chart Editor, go to the Customize tab, open the Series section, and set the gap between bars to zero. Rename the axes to reflect your variable and “Frequency.”
Common Mistakes to Avoid
Leaving gaps between bars is the most frequent error. Gaps signal categorical data (a bar chart), not continuous numerical ranges. Always set the gap width to zero in software, or draw bars edge-to-edge by hand.
Another common mistake is using raw frequency on the y-axis when your classes have unequal widths. This inflates the visual weight of wider classes. Switch to frequency density any time the class widths aren’t uniform.
Forgetting to label the y-axis trips people up in academic settings. Always specify whether it shows “Frequency,” “Relative Frequency,” or “Frequency Density.” And on the x-axis, include the variable name and units (for example, “Test Score” or “Income in $1,000s”) so the chart stands on its own without needing extra explanation.
Finally, watch out for the last class. Make sure its upper boundary extends past your maximum data value. If your highest observation is 100, ending the last class at 100 can cause ambiguity about whether that value is included. Setting the boundary at 100.5 (or using 101 as the bin endpoint in Excel) ensures every value lands in a class.

