🥧📊 R – Pie Charts and Bar Charts: Create Category Plots with Base R & ggplot2
🧲 Introduction – Visualizing Categorical Data in R
When working with categorical data, two common visualization tools are Pie Charts and Bar Charts. R provides both base plotting and ggplot2
options to create these visuals effectively. While pie charts show proportions, bar charts are better for comparing values across categories.
🎯 In this guide, you’ll learn:
- How to create pie and bar charts in base R and
ggplot2
- Use color, labels, legends, and customization
- Choose between bar and pie charts based on best practices
- Understand chart creation line by line
🥧 1. Pie Charts in Base R
✅ Basic Pie Chart
slices <- c(10, 20, 30, 40)
labels <- c("Q1", "Q2", "Q3", "Q4")
pie(slices, labels = labels, main = "Quarterly Revenue Share")
🔍 Explanation:
slices
: Numerical values representing each categorylabels
: Category names shown on chartmain
: Title of the chart
✅ Pie Chart with Percentages
slices <- c(25, 25, 30, 20)
labels <- c("A", "B", "C", "D")
pct <- round(slices / sum(slices) * 100)
labels_pct <- paste(labels, pct, "%")
pie(slices, labels = labels_pct, main = "Category Share")
🔍 Explanation:
round(slices / sum(slices) * 100)
: Calculates percentage sharepaste()
: Combines label with percentage- Shows both label and % on the chart
📊 2. Bar Charts in Base R
✅ Vertical Bar Chart
counts <- table(mtcars$cyl)
barplot(counts, main = "Car Cylinders",
xlab = "Cylinders", ylab = "Count",
col = "lightblue", border = "black")
🔍 Explanation:
table()
counts frequency of cylinder valuesbarplot()
displays those counts as vertical barscol
,border
: Adds color and border styling
✅ Horizontal Bar Chart
barplot(counts, horiz = TRUE,
main = "Horizontal Bar Chart",
xlab = "Count", col = "orange")
✅ Stacked Bar Chart Example
data <- matrix(c(3, 2, 5, 4), nrow = 2)
barplot(data, main = "Stacked Bars", col = c("blue", "green"), legend = c("Set A", "Set B"))
📦 3. Bar Charts with ggplot2
✅ Simple Bar Plot
library(ggplot2)
ggplot(mtcars, aes(x = factor(cyl))) +
geom_bar(fill = "skyblue") +
labs(title = "Cylinder Distribution", x = "Cylinders", y = "Count")
🔍 Explanation:
geom_bar()
counts observations for each categoryfactor(cyl)
ensures categorical axisfill
sets color
✅ Bar Chart with Custom Data
df <- data.frame(
category = c("A", "B", "C"),
value = c(10, 20, 15)
)
ggplot(df, aes(x = category, y = value)) +
geom_col(fill = "steelblue") +
labs(title = "Category Values")
🔍 Explanation:
geom_col()
uses actual y-values (vs.geom_bar()
which counts)- Great for plotting custom category totals
📚 When to Use Bar vs Pie Charts
Feature | Bar Chart | Pie Chart |
---|---|---|
Shows Counts | ✅ Yes | ❌ Not ideal |
Shows Proportions | ✅ Stacked Bars | ✅ Yes |
Precise Comparison | ✅ High | ❌ Difficult |
Labels | ✅ Clear | ❌ May clutter |
Best Practice | ✅ Preferred | ⚠️ Use sparingly |
🔔 Tip: Prefer bar charts for accurate comparison; pie charts are useful for quick, aesthetic proportion views.
🖼️ Save Pie or Bar Charts
png("bar_chart.png", width = 600, height = 400)
barplot(counts, main = "Save Example")
dev.off()
📌 Summary – Recap & Next Steps
Both pie and bar charts are effective tools for categorical data visualization. While bar charts provide clarity and comparison, pie charts are best for quick insights into proportions.
🔍 Key Takeaways:
- Use
pie()
for proportions,barplot()
for frequency ggplot2
offers layered, customizable charting- Prefer bar charts for comparison; pie charts for visual summaries
- Use
geom_bar()
(counts) orgeom_col()
(custom values) inggplot2
⚙️ Real-World Relevance:
Used in business dashboards, surveys, marketing reports, and presentation graphics where category comparison is vital.
❓ FAQs – Pie and Bar Charts in R
❓ Can I sort bars by height in R?
✅ Yes, reorder the factor:
df$category <- factor(df$category, levels = df$category[order(df$value)])
❓ How do I add labels to each bar in a bar chart?
✅ Use text()
in base R:
bp <- barplot(counts)
text(bp, counts, labels = counts, pos = 3)
❓ What’s the difference between geom_bar()
and geom_col()
?
✅ geom_bar()
counts automatically; geom_col()
uses given y-values.
❓ How do I make a 3D pie chart?
✅ Use plotrix::pie3D()
from the plotrix
package.
❓ Can I use hex or RGB colors in plots?
✅ Yes:
barplot(counts, col = "#1f77b4")
Share Now :