📖 Scenario: You are a data analyst working with a dataset of students' test scores from different classes. You want to visualize the distribution of scores to understand how students performed in each class.
🎯 Goal: Build box plots and violin plots in R to compare the score distributions across classes.
📋 What You'll Learn
Create a data frame called scores with columns class and score using the exact data provided.
Create a variable called classes that stores the unique class names from the data frame.
Use a boxplot() function to create box plots of score grouped by class.
Use a vioplot::vioplot() function to create violin plots of score grouped by class.
Print the plots so they are visible in the R plotting window.
💡 Why This Matters
🌍 Real World
Box plots and violin plots are common ways to understand how data is spread out and where most values lie. They help compare groups easily.
💼 Career
Data analysts and scientists use these plots to summarize and communicate data insights clearly to teams and stakeholders.
Progress0 / 4 steps
1
Create the data frame with scores
Create a data frame called scores with two columns: class and score. Use these exact values: class contains "A", "A", "B", "B", "C", "C", "C" and score contains 85, 90, 78, 82, 88, 91, 85.
R Programming
Hint
Use data.frame() with two vectors named class and score.
2
Extract unique class names
Create a variable called classes that stores the unique class names from the class column of the scores data frame using the unique() function.
R Programming
Hint
Use unique() on the class column of scores.
3
Create box plots for scores by class
Use the boxplot() function to create box plots of score grouped by class from the scores data frame. Use the formula score ~ class and set the main title to "Box plot of Scores by Class".
R Programming
Hint
Use the formula score ~ class inside boxplot() and set main for the title.
4
Create violin plots for scores by class
Load the vioplot package using library(vioplot). Then use the vioplot() function to create violin plots for each class's scores. Use the exact order of classes stored in classes. Set the main title to "Violin plot of Scores by Class" and label the x-axis as "Class" and y-axis as "Score".
R Programming
Hint
Use library(vioplot) to load the package. Use vioplot() with scores filtered by class using scores$score[scores$class == classes[i]] for each class.
Practice
(1/5)
1. What does a box plot primarily show about a dataset?
easy
A. The median, quartiles, and potential outliers
B. The exact frequency of each data point
C. The shape and density of the data distribution
D. Only the minimum and maximum values
Solution
Step 1: Understand box plot components
A box plot displays the median line, the box showing the interquartile range (Q1 to Q3), and whiskers for minimum and maximum values excluding outliers.
Step 2: Compare options to box plot features
The median, quartiles, and potential outliers correctly describes median, quartiles, and outliers. The shape and density of the data distribution describes violin plots, not box plots.
Final Answer:
The median, quartiles, and potential outliers -> Option A
Quick Check:
Box plot = median + quartiles + outliers [OK]
Hint: Box plots show median and spread, violin plots show density [OK]
Common Mistakes:
Confusing violin plot features with box plot
Thinking box plot shows exact data frequencies
Ignoring outliers in box plot
2. Which of the following R commands correctly creates a violin plot using ggplot2 for a dataset df with numeric variable value and group category?
easy
A. ggplot(df, aes(x=category, y=value)) + geom_violin()
B. ggplot(df, aes(x=value, y=category)) + geom_boxplot()
C. plot(df$value, df$category, type='violin')
D. ggplot(df, aes(x=category, y=value)) + geom_histogram()
Solution
Step 1: Identify correct ggplot2 syntax for violin plot
The correct syntax uses ggplot with aes mapping x to category and y to value, then adds geom_violin() to create violin plots.
Step 2: Check each option
ggplot(df, aes(x=category, y=value)) + geom_violin() matches correct syntax. ggplot(df, aes(x=value, y=category)) + geom_boxplot() swaps x and y and uses boxplot, not violin. plot(df$value, df$category, type='violin') uses base plot with invalid type. ggplot(df, aes(x=category, y=value)) + geom_histogram() uses histogram, not violin plot.
Final Answer:
ggplot(df, aes(x=category, y=value)) + geom_violin() -> Option A
A. geom_boxplot() cannot be used with categorical variables
B. Missing + sign before geom_boxplot()
C. The x and y aesthetics are swapped; x should be group and y should be value
D. The data frame is missing numeric values
Solution
Step 1: Check aesthetic mappings for box plot
Box plots require the categorical variable on the x-axis and numeric variable on the y-axis to show distribution per group.
Step 2: Identify the swapped aesthetics
The code uses x=value (numeric) and y=group (categorical), which is reversed. It should be x=group and y=value.
Final Answer:
The x and y aesthetics are swapped; x should be group and y should be value -> Option C
Quick Check:
Box plot: x=category, y=numeric [OK]
Hint: Box plot x = group, y = numeric value [OK]
Common Mistakes:
Swapping x and y in aes()
Assuming geom_boxplot needs numeric x
Ignoring axis roles in box plots
5. You have a dataset with three groups and numeric scores. You want to visualize both the distribution shape and summary statistics for each group in one plot. Which R code snippet best achieves this?
hard
A. ggplot(data, aes(x=group, y=score)) + geom_histogram() + geom_boxplot()
B. ggplot(data, aes(x=group, y=score)) + geom_violin(trim=FALSE) + geom_boxplot(width=0.1, fill='white')
C. ggplot(data, aes(x=score, y=group)) + geom_violin() + geom_point()
D. ggplot(data, aes(x=group, y=score)) + geom_point() + geom_line()
Solution
Step 1: Understand the goal
The goal is to show distribution shape (violin plot) and summary statistics (box plot) together per group.
Step 2: Evaluate each option
ggplot(data, aes(x=group, y=score)) + geom_violin(trim=FALSE) + geom_boxplot(width=0.1, fill='white') overlays violin plot with trim=FALSE (shows full distribution) and a narrow box plot with white fill for clarity. ggplot(data, aes(x=score, y=group)) + geom_violin() + geom_point() swaps axes and adds points but misses box plot summary. ggplot(data, aes(x=group, y=score)) + geom_histogram() + geom_boxplot() mixes histogram (not grouped) with box plot incorrectly. ggplot(data, aes(x=group, y=score)) + geom_point() + geom_line() shows points and lines, not distribution or summary.