📖 Scenario: You are analyzing daily sales data for a small shop. You want to plot the sales over a week and show the dates nicely on the x-axis.
🎯 Goal: Create a line plot of sales over dates and format the x-axis dates using mdates for clear date labels.
📋 What You'll Learn
Create a list of dates for one week using datetime.date
Create a list of sales numbers matching the dates
Use matplotlib to plot sales vs dates
Use mdates to format the x-axis dates as 'Day-Month'
Display the plot with formatted date labels
💡 Why This Matters
🌍 Real World
Date formatting is important when visualizing time series data like sales, weather, or stock prices to make charts easy to read.
💼 Career
Data scientists and analysts often use date formatting to create clear and professional time-based visualizations for reports and presentations.
Progress0 / 4 steps
1
Create the dates and sales data
Create a list called dates with these exact datetime.date values: 2024-06-01, 2024-06-02, 2024-06-03, 2024-06-04, 2024-06-05, 2024-06-06, 2024-06-07. Also create a list called sales with these exact values: 150, 200, 170, 220, 180, 210, 190.
Matplotlib
Hint
Use datetime.date(year, month, day) to create each date.
2
Set up the date formatter
Import matplotlib.pyplot as plt and matplotlib.dates as mdates. Create a variable called date_format that uses mdates.DateFormatter to format dates as '%d-%b' (day and abbreviated month).
Matplotlib
Hint
Use mdates.DateFormatter('%d-%b') to create the formatter.
3
Plot the sales data with formatted dates
Use plt.plot to plot dates on the x-axis and sales on the y-axis. Then get the current axes with ax = plt.gca(). Use ax.xaxis.set_major_formatter(date_format) to apply the date formatter to the x-axis.
Matplotlib
Hint
Use plt.plot(dates, sales) to plot, then ax = plt.gca() and ax.xaxis.set_major_formatter(date_format).
4
Display the plot
Write plt.show() to display the plot with the formatted date labels on the x-axis.
Matplotlib
Hint
Use plt.show() to display the plot window.
Practice
(1/5)
1. What is the main purpose of using mdates.DateFormatter in matplotlib?
easy
A. To customize how dates appear on the x-axis of a plot
B. To change the color of the plot lines
C. To add grid lines to the plot
D. To save the plot as an image file
Solution
Step 1: Understand the role of DateFormatter
mdates.DateFormatter is used to format date labels on axes in matplotlib plots.
Step 2: Identify what DateFormatter customizes
It changes how dates are shown, for example, showing only month and day or full date and time.
Final Answer:
To customize how dates appear on the x-axis of a plot -> Option A
Quick Check:
DateFormatter formats dates = A [OK]
Hint: DateFormatter changes date label style on axes [OK]
Common Mistakes:
Confusing DateFormatter with plot styling functions
Thinking it changes plot colors
Assuming it saves files
2. Which of the following is the correct way to create a date formatter that shows dates as 'Year-Month-Day' using mdates.DateFormatter?
easy
A. mdates.DateFormatter('Y-m-d')
B. mdates.DateFormatter('%D-%M-%Y')
C. mdates.DateFormatter('%y/%M/%d')
D. mdates.DateFormatter('%Y-%m-%d')
Solution
Step 1: Recall strftime format codes
Year is '%Y', month is '%m', day is '%d' in strftime formatting.
Step 2: Match correct format string
mdates.DateFormatter('%Y-%m-%d') uses '%Y-%m-%d' which correctly formats as Year-Month-Day.
Final Answer:
mdates.DateFormatter('%Y-%m-%d') -> Option D
Quick Check:
Correct strftime codes = B [OK]
Hint: Use %Y, %m, %d for year, month, day in DateFormatter [OK]
Common Mistakes:
Omitting % signs in format string
Using uppercase M for minutes instead of month
Mixing order of year, month, day
3. What will be the output on the x-axis labels if the following code is used?
import matplotlib.pyplot as plt
import matplotlib.dates as mdates
import pandas as pd
dates = pd.date_range('2023-01-01', periods=3)
values = [10, 20, 15]
fig, ax = plt.subplots()
ax.plot(dates, values)
ax.xaxis.set_major_formatter(mdates.DateFormatter('%b %d'))
plt.show()
medium
A. Labels show dates as '01-01-2023', '01-02-2023', '01-03-2023'
B. Labels show dates as 'Jan 01', 'Jan 02', 'Jan 03'
C. Labels show dates as '2023-01-01', '2023-01-02', '2023-01-03'
D. Labels show dates as '01 Jan', '02 Jan', '03 Jan'
Solution
Step 1: Understand the format string '%b %d'
'%b' is abbreviated month name (e.g., Jan), '%d' is day with leading zero.
Step 2: Apply format to dates
Dates will appear as 'Jan 01', 'Jan 02', 'Jan 03' on x-axis labels.
Final Answer:
Labels show dates as 'Jan 01', 'Jan 02', 'Jan 03' -> Option B
Quick Check:
Format '%b %d' = 'Jan 01' style [OK]
Hint: Check strftime codes to predict label format [OK]
Common Mistakes:
Confusing %b with %B (full month name)
Expecting numeric month instead of abbreviated
Ignoring leading zeros in day
4. Identify the error in this code snippet that tries to format dates on the x-axis:
import matplotlib.pyplot as plt
import matplotlib.dates as mdates
import pandas as pd
dates = pd.date_range('2023-01-01', periods=3)
values = [5, 10, 15]
fig, ax = plt.subplots()
ax.plot(dates, values)
ax.xaxis.set_major_formatter(mdates.DateFormatter('%Y-%m-%d'))
ax.xaxis.set_major_locator(mdates.DayLocator())
plt.show()
medium
A. No error; code runs and formats dates correctly
B. Missing import for DayLocator
C. DateFormatter format string is invalid
D. Plot will fail because dates are not converted to numbers
Solution
Step 1: Check imports and usage
All necessary imports are present, including mdates.DayLocator and DateFormatter.
Step 2: Verify date formatting and locator
DateFormatter uses valid '%Y-%m-%d' format; DayLocator sets ticks daily. Dates are pandas datetime objects, which matplotlib handles.
Final Answer:
No error; code runs and formats dates correctly -> Option A
Quick Check:
Correct imports and usage = D [OK]
Hint: Check imports and valid format strings first [OK]
Common Mistakes:
Assuming pandas dates need manual conversion
Using wrong format codes in DateFormatter
Forgetting to set locator for ticks
5. You want to plot daily sales data for a month and show x-axis labels only for Mondays in 'Month-Day' format (e.g., 'Jan-02'). Which combination of mdates functions should you use to achieve this?
hard
A. Use mdates.MonthLocator() and mdates.DateFormatter('%b')
B. Use mdates.DayLocator() and mdates.DateFormatter('%Y-%m-%d')
C. Use mdates.WeekdayLocator(byweekday=mdates.MO) and mdates.DateFormatter('%b-%d')
D. Use mdates.HourLocator() and mdates.DateFormatter('%H:%M')
Solution
Step 1: Choose locator for Mondays only
mdates.WeekdayLocator(byweekday=mdates.MO) selects ticks only on Mondays.
Step 2: Format labels as 'Month-Day'
mdates.DateFormatter('%b-%d') formats dates like 'Jan-02'.
Final Answer:
Use mdates.WeekdayLocator(byweekday=mdates.MO) and mdates.DateFormatter('%b-%d') -> Option C
Quick Check:
Monday ticks + 'Jan-02' format = C [OK]
Hint: Use WeekdayLocator with MO and DateFormatter '%b-%d' [OK]
Common Mistakes:
Using DayLocator shows all days, not Mondays only
MonthLocator shows monthly ticks, not weekly
HourLocator is for time, not dates
Recommended
Ready to prove it?
Pass the test and this pattern moves unknownstrongwhile earning +1 Grip toward your certificate.