📖 Scenario: You are a data analyst working with a small dataset of exam scores from two classes. You want to visualize the distribution of scores to understand how students performed in each class.
🎯 Goal: Build a violin plot using plt.violinplot to compare the score distributions of two classes.
📋 What You'll Learn
Create a list of scores for two classes
Set up a figure and axis using matplotlib
Use plt.violinplot to plot the score distributions
Label the x-axis with class names
Display the plot
💡 Why This Matters
🌍 Real World
Violin plots help compare distributions of data, like exam scores or sales numbers, to see patterns and differences clearly.
💼 Career
Data analysts and scientists use violin plots to visualize data distributions and communicate insights effectively.
Progress0 / 4 steps
1
Create the exam scores data
Create two lists called class1_scores and class2_scores with these exact values: class1_scores = [55, 60, 65, 70, 75, 80, 85] and class2_scores = [50, 55, 60, 65, 70, 75, 80, 85, 90].
Matplotlib
Hint
Use square brackets to create lists with the exact numbers given.
2
Set up the plot figure and axis
Import matplotlib.pyplot as plt. Then create a figure and axis using fig, ax = plt.subplots().
Matplotlib
Hint
Use import matplotlib.pyplot as plt and then plt.subplots() to create the plot area.
3
Create the violin plot with plt.violinplot
Use ax.violinplot to plot the two score lists together. Pass a list containing class1_scores and class2_scores as the data argument.
Matplotlib
Hint
Pass a list containing both score lists to ax.violinplot.
4
Label the plot and display it
Set the x-axis tick labels to ["Class 1", "Class 2"] using ax.set_xticks([1, 2]) and ax.set_xticklabels(["Class 1", "Class 2"]). Then call plt.show() to display the plot.
Matplotlib
Hint
Use ax.set_xticks and ax.set_xticklabels to label the classes. Then call plt.show() to see the plot.
Practice
(1/5)
1. What does the plt.violinplot() function in matplotlib primarily show?
easy
A. The exact data points as dots
B. The distribution shape and spread of data
C. The correlation between two variables
D. Only the mean value of the data
Solution
Step 1: Understand the purpose of violin plots
Violin plots visualize the distribution shape and spread of data, combining boxplot and kernel density estimation.
Step 2: Identify what plt.violinplot() shows
This function creates violin plots that display data distribution, not just summary statistics or correlations.
Final Answer:
The distribution shape and spread of data -> Option B
Quick Check:
Violin plot = distribution shape [OK]
Hint: Violin plots show data spread and shape, not just averages [OK]
Common Mistakes:
Thinking it shows only mean or median
Confusing with scatter or line plots
Assuming it shows correlation
2. Which of the following is the correct way to create a violin plot for a list of data data using matplotlib?
easy
A. plt.plot.violinplot(data)
B. plt.violin(data)
C. plt.violinplot(data)
D. plt.violinplot(data, kind='violin')
Solution
Step 1: Recall the correct function name and usage
The correct function to create violin plots in matplotlib is plt.violinplot() and it takes the data as the first argument.
Step 2: Check each option for syntax correctness
plt.violinplot(data) uses the correct function and syntax. plt.plot.violinplot(data) has incorrect chaining, plt.violin(data) uses the wrong function name, and plt.violinplot(data, kind='violin') adds an invalid parameter kind.
Final Answer:
plt.violinplot(data) -> Option C
Quick Check:
Correct function call = plt.violinplot(data) [OK]
Hint: Use plt.violinplot(data) directly to plot violin plots [OK]
Common Mistakes:
Using plt.violin instead of plt.violinplot
Adding unsupported parameters
Incorrect function chaining like plt.plot.violinplot
3. What will the following code output?
import matplotlib.pyplot as plt
import numpy as np
np.random.seed(0)
data = [np.random.normal(0, 1, 100), np.random.normal(5, 1, 100)]
plt.violinplot(data)
plt.show()
medium
A. Two violin plots side by side showing distributions centered near 0 and 5
B. A single violin plot combining both datasets
C. An error because data is a list of arrays
D. A scatter plot of all data points
Solution
Step 1: Understand the input data structure
The data is a list containing two arrays, each with 100 values from normal distributions centered at 0 and 5 respectively.
Step 2: Know how plt.violinplot handles list of datasets
When given a list of arrays, plt.violinplot creates separate violins for each dataset side by side.
Final Answer:
Two violin plots side by side showing distributions centered near 0 and 5 -> Option A
Quick Check:
List of arrays = multiple violins [OK]
Hint: List of arrays creates multiple violins side by side [OK]
Common Mistakes:
Thinking it merges all data into one violin
Expecting a scatter plot instead
Assuming it causes an error with list input
4. Identify the error in this code snippet:
import matplotlib.pyplot as plt
data = [1, 2, 3, 4, 5]
plt.violinplot(data, positions=3)
plt.show()
medium
A. plt.show() is missing
B. data must be a numpy array, not a list
C. plt.violinplot does not accept positions argument
D. positions must be a list or array, not a single integer
Solution
Step 1: Check the use of the positions parameter
The positions argument expects a list or array of positions for each violin, not a single integer.
Step 2: Verify the data type and function usage
Data can be a list, and plt.violinplot accepts positions, but it must match the number of violins as a list or array.
Final Answer:
positions must be a list or array, not a single integer -> Option D
Quick Check:
positions needs list/array [OK]
Hint: positions must be list/array matching violins count [OK]
Common Mistakes:
Passing single int to positions
Thinking data must be numpy array
Ignoring plt.show() call
5. You have three groups of exam scores stored as lists: group1, group2, and group3. You want to compare their score distributions side by side using violin plots with custom positions at 1, 3, and 5. Which code correctly creates this plot?
hard
A. plt.violinplot([group1, group2, group3], positions=[1, 3, 5])
B. plt.violinplot(group1, group2, group3, positions=[1, 3, 5])
C. plt.violinplot([group1, group2, group3], position=[1, 3, 5])
D. plt.violinplot([group1, group2, group3], positions=1,3,5)
Solution
Step 1: Understand the input format for multiple violins
Multiple datasets must be passed as a single list containing each group's data.
Step 2: Use the correct parameter name and format for positions
The parameter is positions and it must be a list or array matching the number of violins.
Step 3: Check each option for syntax correctness
plt.violinplot([group1, group2, group3], positions=[1, 3, 5]) correctly passes a list of groups and a list of positions. plt.violinplot(group1, group2, group3, positions=[1, 3, 5]) incorrectly passes multiple arguments instead of a list. plt.violinplot([group1, group2, group3], position=[1, 3, 5]) uses wrong parameter name position. plt.violinplot([group1, group2, group3], positions=1,3,5) passes positions as separate arguments, which is invalid.
Final Answer:
plt.violinplot([group1, group2, group3], positions=[1, 3, 5]) -> Option A
Quick Check:
List of groups + positions list = correct call [OK]
Hint: Pass groups as list and positions as list for multiple violins [OK]
Common Mistakes:
Passing groups as separate arguments
Using wrong parameter name 'position'
Passing positions as separate arguments
Recommended
Ready to prove it?
Pass the test and this pattern moves unknownstrongwhile earning +1 Grip toward your certificate.