How to plot a kernel density plot of dates in Pandas using Matplotlib?

A kernel density plot visualizes the probability density function of data. When working with dates in Pandas, we need to convert them to numerical values before plotting the density estimate.

Steps to Create a Kernel Density Plot

  • Create a DataFrame with date values
  • Convert dates to ordinal numbers for numerical processing
  • Plot the kernel density estimate using plot(kind='kde')
  • Format x-axis ticks back to readable date labels

Example

Here's how to create a kernel density plot for date data ?

import pandas as pd
import numpy as np
import datetime
import matplotlib.pyplot as plt

# Set figure size
plt.rcParams["figure.figsize"] = [7.50, 3.50]
plt.rcParams["figure.autolayout"] = True

# Create date range and sample data
dates = pd.date_range('2010-01-01', periods=31, freq='D')
df = pd.DataFrame(np.random.choice(dates, 100), columns=['dates'])

# Convert dates to ordinal numbers for plotting
df['ordinal'] = [x.toordinal() for x in df.dates]

# Create kernel density plot
ax = df['ordinal'].plot(kind='kde')

# Format x-axis with readable date labels
x_ticks = ax.get_xticks()
ax.set_xticks(x_ticks[::2])

xlabels = [datetime.datetime.fromordinal(int(x))
               .strftime('%Y-%m-%d') for x in x_ticks[::2]]
ax.set_xticklabels(xlabels)

plt.title('Kernel Density Plot of Dates')
plt.xlabel('Date')
plt.ylabel('Density')
plt.show()

How It Works

The process involves several key steps:

  • Date Conversion: Dates are converted to ordinal numbers using toordinal()
  • KDE Plotting: The plot(kind='kde') method creates the density curve
  • Tick Formatting: X-axis ticks are converted back to readable date format

Alternative Approach with Seaborn

You can also use Seaborn for more advanced styling ?

import pandas as pd
import numpy as np
import seaborn as sns
import matplotlib.pyplot as plt

# Create sample date data
dates = pd.date_range('2010-01-01', periods=50, freq='D')
df = pd.DataFrame({
    'dates': np.random.choice(dates, 200),
    'category': np.random.choice(['A', 'B'], 200)
})

df['ordinal'] = df['dates'].apply(lambda x: x.toordinal())

# Create KDE plot with categories
plt.figure(figsize=(10, 4))
for category in df['category'].unique():
    subset = df[df['category'] == category]
    sns.kdeplot(data=subset['ordinal'], label=f'Category {category}')

plt.xlabel('Date')
plt.ylabel('Density')
plt.title('Kernel Density Plot by Category')
plt.legend()
plt.show()

Conclusion

Converting dates to ordinal numbers enables kernel density plotting in Pandas and Matplotlib. Use toordinal() for conversion and format x-axis labels back to readable dates for better visualization.

Updated on: 2026-03-25T23:40:33+05:30

897 Views

Kickstart Your Career

Get certified by completing the course

Get Started
Advertisements