Bird
Raised Fist0
Matplotlibdata~10 mins

Date formatting with mdates in Matplotlib - Step-by-Step Execution

Choose your learning style10 modes available
Concept Flow - Date formatting with mdates
Import matplotlib and mdates
↓
Create date data and values
↓
Plot dates vs values
↓
Set date formatter with mdates
↓
Display formatted date ticks on x-axis
↓
Show plot
This flow shows how to import mdates, create date data, plot it, apply date formatting, and display the plot with formatted dates.
Execution Sample
Matplotlib
import matplotlib.pyplot as plt
import matplotlib.dates as mdates
from datetime import datetime, timedelta

dates = [datetime.today() + timedelta(days=i) for i in range(5)]
values = [1, 3, 2, 5, 4]

plt.plot(dates, values)
plt.gca().xaxis.set_major_formatter(mdates.DateFormatter('%Y-%m-%d'))
plt.gcf().autofmt_xdate()
plt.show()
This code plots values against dates and formats the x-axis dates as 'YYYY-MM-DD'.
Execution Table
StepActionVariable/FunctionResult/State
1Import matplotlib.pyplot as pltpltmatplotlib.pyplot module loaded
2Import matplotlib.dates as mdatesmdatesmatplotlib.dates module loaded
3Import datetime and timedeltadatetime, timedeltadatetime and timedelta classes loaded
4Create dates listdates[datetime objects for today + 0 to 4 days]
5Create values listvalues[1, 3, 2, 5, 4]
6Plot dates vs valuesplt.plotLine plot created with dates on x-axis
7Set major formatter for x-axisplt.gca().xaxis.set_major_formatterDates formatted as 'YYYY-MM-DD' on x-axis
8Show plotplt.showPlot window opens displaying formatted dates
9Exit-Plot displayed, execution ends
💡 Plot displayed and script ends after plt.show()
Variable Tracker
VariableStartAfter Step 4After Step 5Final
datesundefined[today, today+1d, today+2d, today+3d, today+4d][today, today+1d, today+2d, today+3d, today+4d][today, today+1d, today+2d, today+3d, today+4d]
valuesundefinedundefined[1, 3, 2, 5, 4][1, 3, 2, 5, 4]
Key Moments - 3 Insights
Why do we use plt.gca().xaxis.set_major_formatter instead of just plt.set_major_formatter?
Because plt.gca() gets the current axes object, and set_major_formatter is a method of the x-axis of that axes. plt itself does not have set_major_formatter.
What does '%Y-%m-%d' mean in DateFormatter?
It is a format string where %Y is 4-digit year, %m is 2-digit month, and %d is 2-digit day, so dates show like '2024-06-15'.
Why do dates appear on the x-axis instead of numbers?
Because matplotlib converts datetime objects to numbers internally but formats the ticks back to readable dates using the DateFormatter.
Visual Quiz - 3 Questions
Test your understanding
Look at the execution table, what is the state of 'dates' after Step 4?
AA list of integers from 0 to 4
BA list of datetime objects from today to 4 days later
CAn empty list
DA list of strings representing dates
💡 Hint
Check the 'dates' variable value in the 'After Step 4' column in variable_tracker.
At which step is the date format '%Y-%m-%d' applied to the x-axis?
AStep 5
BStep 6
CStep 7
DStep 8
💡 Hint
Look at the 'Action' column in execution_table for setting major formatter.
If we change the format string to '%b %d', how would the plot's x-axis labels change?
ADates would show as abbreviated month and day, e.g., 'Jun 15'
BDates would show as full year, e.g., '2024'
CDates would show as numeric day only, e.g., '15'
DDates would not change
💡 Hint
Refer to the explanation of '%Y-%m-%d' format in key_moments and how format strings control date display.
Concept Snapshot
Use matplotlib.dates (mdates) to format date ticks on plots.
Create datetime objects for x-axis data.
Plot dates vs values normally.
Use plt.gca().xaxis.set_major_formatter(mdates.DateFormatter('format')) to set date format.
Common format: '%Y-%m-%d' for year-month-day.
Show plot with plt.show() to see formatted dates.
Full Transcript
This visual execution traces how to format dates on a matplotlib plot using mdates. First, we import matplotlib.pyplot as plt and matplotlib.dates as mdates, along with datetime and timedelta for date creation. We create a list of dates starting from today and increasing by one day for 5 days. We also create a list of values to plot. We plot the dates against values using plt.plot. Then, we set the x-axis major formatter to a DateFormatter with the format '%Y-%m-%d', which formats dates as year-month-day. Finally, we show the plot with plt.show(), which opens a window displaying the line plot with nicely formatted date labels on the x-axis. Variables 'dates' and 'values' hold the data, and the formatting is applied to the x-axis ticks. Key points include using plt.gca() to get the current axes and applying the formatter to the x-axis, understanding the date format string, and knowing that matplotlib internally converts dates to numbers but displays formatted dates. The quiz questions check understanding of variable states, step actions, and date format effects.

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

  1. Step 1: Understand the role of DateFormatter

    mdates.DateFormatter is used to format date labels on axes in matplotlib plots.
  2. Step 2: Identify what DateFormatter customizes

    It changes how dates are shown, for example, showing only month and day or full date and time.
  3. Final Answer:

    To customize how dates appear on the x-axis of a plot -> Option A
  4. 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

  1. Step 1: Recall strftime format codes

    Year is '%Y', month is '%m', day is '%d' in strftime formatting.
  2. Step 2: Match correct format string

    mdates.DateFormatter('%Y-%m-%d') uses '%Y-%m-%d' which correctly formats as Year-Month-Day.
  3. Final Answer:

    mdates.DateFormatter('%Y-%m-%d') -> Option D
  4. 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

  1. Step 1: Understand the format string '%b %d'

    '%b' is abbreviated month name (e.g., Jan), '%d' is day with leading zero.
  2. Step 2: Apply format to dates

    Dates will appear as 'Jan 01', 'Jan 02', 'Jan 03' on x-axis labels.
  3. Final Answer:

    Labels show dates as 'Jan 01', 'Jan 02', 'Jan 03' -> Option B
  4. 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

  1. Step 1: Check imports and usage

    All necessary imports are present, including mdates.DayLocator and DateFormatter.
  2. 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.
  3. Final Answer:

    No error; code runs and formats dates correctly -> Option A
  4. 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

  1. Step 1: Choose locator for Mondays only

    mdates.WeekdayLocator(byweekday=mdates.MO) selects ticks only on Mondays.
  2. Step 2: Format labels as 'Month-Day'

    mdates.DateFormatter('%b-%d') formats dates like 'Jan-02'.
  3. Final Answer:

    Use mdates.WeekdayLocator(byweekday=mdates.MO) and mdates.DateFormatter('%b-%d') -> Option C
  4. 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 unknown strong while earning +1 Grip toward your certificate.

10 questions~5 mineasy hard