🥧 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 axisfillsets 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 ggplot2offers 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 :
