Bar Charts
This lesson is called Bar Charts, part of the R in 3 Months (Spring 2025) course. This lesson is called Bar Charts, part of the R in 3 Months (Spring 2025) course.
Transcript
Click on the transcript to go to that point in the video. Please note that transcripts are auto generated and may contain minor inaccuracies.
View code shown in video
# Load Packages -----------------------------------------------------------
library(tidyverse)
# Import Data -------------------------------------------------------------
penguins <- read_csv("penguins.csv")
# Bar Charts --------------------------------------------------------------
# There are two basic approaches to making bar charts,
# both of which use geom_bar().
# Approach #1
# Use your full dataset.
# Only assign a variable to the x axis.
# Let ggplot use the default stat transformation (stat = "count")
# to generate counts that it then plots on the y axis.
ggplot(data = penguins,
mapping = aes(x = bill_length_mm)) +
geom_bar()
# The default statistical transformation for geom_bar() is count.
# This will give us the same result as our previous plot.
ggplot(data = penguins,
mapping = aes(x = bill_length_mm)) +
geom_bar(stat = "count")
# Approach #2
# Wrangle your data frame before plotting, creating a new data frame
# in the process
# Assign variables to the x and y axes
# Use stat = "identity" to tell ggplot to use the data exactly as it is
# It's often easier to do our analysis work, save a data frame,
# and then use this to plot.
# Let's recreate our penguin_bill_length_by_island data frame.
penguin_bill_length_by_island <- penguins |>
group_by(island) |>
summarize(mean_bill_length = mean(bill_length_mm, na.rm = TRUE)) |>
arrange(mean_bill_length)
# Then let's use this data frame to make a bar chart.
# The stat = "identity" here tells ggplot to use the exact data points
# without any statistical transformations.
ggplot(data = penguin_bill_length_by_island,
mapping = aes(x = island,
y = mean_bill_length)) +
geom_bar(stat = "identity")
# We can also flip the x and y axes.
ggplot(data = penguin_bill_length_by_island,
mapping = aes(x = mean_bill_length,
y = island)) +
geom_bar(stat = "identity")
# The function coord_flip() will do the same thing.
ggplot(data = penguin_bill_length_by_island,
mapping = aes(x = island,
y = mean_bill_length)) +
geom_bar(stat = "identity") +
coord_flip()
# We can also use geom_col(), which is the same as geom_bar(stat = "identity")
ggplot(data = penguin_bill_length_by_island,
mapping = aes(x = island,
y = mean_bill_length)) +
geom_col()
Your Turn
# Load Packages -----------------------------------------------------------
library(tidyverse)
# Import Data -------------------------------------------------------------
penguins <- read_csv("penguins.csv")
# Bar Charts --------------------------------------------------------------
# Use the v1 approach to make a bar chart that shows a count of the number of penguins by species.
# YOUR CODE HERE
# Use the v2 approach by doing the following:
# 1. Creating a new data frame called penguins_by_species that is a
# count of the number of penguins by species
# 2. Plot your data frame using the v2 approach with geom_bar()
# YOUR CODE HERE
# Make the same graph as above, but use geom_col() instead of geom_bar()
# YOUR CODE HERE
Learn More
You can also find examples of code to make bar charts on the Data to Viz website , the R Graph Gallery website , and in Chapter 3 of the R Graphics Cookbook. Michael Toth also has a detailed blog post about making bar charts with ggplot.
Have any questions? Put them below and we will help you out!
Course Content
127 Lessons
1
Welcome to Getting Started with R
00:57
2
Install R
02:05
3
Install RStudio
02:14
4
Files in R
04:33
5
Projects
07:54
6
Packages
02:38
7
Import Data
05:24
8
Objects and Functions
03:16
9
Examine our Data
12:50
10
Import Our Data Again
07:11
11
Getting Help
07:46
12
Week 1 Live Session (Spring 2025)
1:03:11
1
Welcome to Fundamentals of R
01:36
2
Update Everything
02:45
3
Start a New Project
02:16
4
The Tidyverse
03:34
5
Pipes
04:15
6
select()
07:25
7
mutate()
04:25
8
filter()
10:05
9
summarize()
05:59
10
group_by() and summarize()
05:54
11
arrange()
02:07
12
Create a New Data Frame
03:58
13
Bring it All Together (Data Wrangling)
07:29
14
Week 2 Project Assignment
09:39
15
Week 2 Coworking Session (Spring 2025)
16
Week 2 Live Session (Spring 2025)
1:03:24
1
The Grammar of Graphics
04:39
2
Scatterplots
03:46
3
Histograms
05:47
4
Bar Charts
06:37
5
Setting color and fill Aesthetic Properties
02:39
6
Setting color and fill Scales
05:40
7
Setting x and y Scales
03:09
8
Adding Text to Plots
07:32
9
Plot Labels
03:57
10
Themes
02:19
11
Facets
03:12
12
Save Plots
02:57
13
Bring it All Together (Data Visualization)
06:42
14
Week 3 Project Assignment
03:30
15
Week 3 Coworking Session (Spring 2025)
16
Week 3 Live Session (Spring 2025)
1:02:31
1
Downloading and Importing Data
10:32
2
Overview of Tidy Data
05:50
3
Tidy Data Rule #1: Every Column is a Variable
07:43
4
Tidy Data Rule #3: Every Cell is a Single Value
10:04
5
Tidy Data Rule #2: Every Row is an Observation
04:42
6
Week 6 Coworking Session (Spring 2025)
7
Week 6 Live Session (Spring 2025)
1:02:38
1
Best Practices in Data Visualization
03:44
2
Tidy Data
02:25
3
Pipe Data into ggplot
09:54
4
Reorder Plots to Highlight Findings
03:37
5
Line Charts
04:17
6
Use Color to Highlight Findings
09:16
7
Declutter
08:29
8
Add Descriptive Labels to Your Plots
09:10
9
Use Titles to Highlight Findings
08:14
10
Use Annotations to Explain
07:09
11
Week 9 Coworking Session (Spring 2025)
12
Week 9 Live Session (Spring 2025)
59:09
1
Advanced Markdown
06:43
2
Tables
18:36
3
Advanced YAML and Code Chunk Options
05:53
4
Inline R Code
04:42
5
Making Your Reports Shine: Word Edition
04:30
6
Making Your Reports Shine: PDF Edition
06:11
7
Making Your Reports Shine: HTML Edition
06:06
8
Presentations
10:12
9
Dashboards
05:38
10
Websites
06:43
11
Publishing Your Work
04:38
12
Quarto Extensions
05:50
13
Parameterized Reporting, Part 1
10:57
14
Parameterized Reporting, Part 2
05:11
15
Parameterized Reporting, Part 3
07:47
16
Week 12 Coworking Session (Spring 2025)
17
Week 12 Live Session (Spring 2025)
57:01
You need to be signed-in to comment on this post. Login.
John LeMay • October 18, 2024
Why do the extra data wrangling for v2? Is it in case you want to do something besides a basic count for each bar? I am a bit confused on that.
David Keyes Founder • October 19, 2024
Good question! My experience is that you only rarely want to make a simple enough plot that the v1 approach works. Usually, I'm doing a bunch of filtering, summarizing, etc before I plot. In that case, it's easiest (at least for how my mind works) to do this, save it as an object, and then use this to plot. Hope that helps!
John LeMay • October 21, 2024
I get you! Real-life data is rarely that simplistic!
Alagammai Meyyappan • March 24, 2025
So, just to be sure, I can use geom_bar() when I have mapped either x or y, and geom_col() when I have mapped both?
Gracielle Higino Coach • March 25, 2025
Hi Alagammai! You can actually use x and y in both (they are actually required arguments, in the end), but how you use them is different depending on the geom you're using.
geom_bar
is a frequency plot, and so you don't need to specify an y argument and R will count how many times each value on the x axis appear on your dataset. However, you can do something like this:In this case you have specified the y argument and modified the
geom_bar
layer to accommodate not a count, but a summary value of y.On the other hand,
geom_col
uses the actual value of y (not a frequency count of x), so you necessarily need to specify y.Alagammai Meyyappan • March 27, 2025
Thank you, Gracielle.