Pandas Dataframe line plot display date on xaxis
Problem:
When attempting to plot a Pandas DataFrame with dates on the x-axis, the matplotlib library produces inaccurate formatting and dates that do not correspond correctly to the data.
Answer:
The incompatibility between the datetime utilities of Pandas and Matplotlib is the root cause of this problem. Pandas uses a non-standard floating-point representation for datetime objects, which is incompatible with Matplotlib's own date formatting methods.
Solution:
To resolve this issue, there are two possible approaches:
Disable Pandas date formatting:
By setting x_compat=True when plotting the DataFrame, Pandas will use Matplotlib's internal date formatting mechanisms, allowing for more precise control over the x-axis formatting.
Use Matplotlib exclusively for plotting and formatting:
Instead of relying on Pandas for date plotting, you can use Matplotlib's own methods to handle the date values and formatting. This provides greater flexibility and allows you to customize the date formatting as needed.
Here's an updated example that demonstrates both approaches:
<code class="python">import pandas as pd import matplotlib.pyplot as plt import matplotlib.dates as dates df = pd.DataFrame({'date': ['20170527', '20170526', '20170525'], 'ratio1': [1, 0.98, 0.97]}) df['date'] = pd.to_datetime(df['date']) usePandas = True # Either use Pandas if usePandas: df = df.set_index('date') ax = df.plot(x_compat=True, figsize=(6, 4)) ax.xaxis.set_major_locator(dates.DayLocator()) ax.xaxis.set_major_formatter(dates.DateFormatter('%d\n\n%a')) ax.invert_xaxis() ax.get_figure().autofmt_xdate(rotation=0, ha="center") # or use Matplotlib else: fig, ax = plt.subplots(figsize=(6, 4)) ax.plot('date', 'ratio1', data=df) ax.xaxis.set_major_locator(dates.DayLocator()) ax.xaxis.set_major_formatter(dates.DateFormatter('%d\n\n%a')) fig.invert_xaxis() plt.show()</code>
By using either of these approaches, you can effectively display datetime values on the x-axis of a Pandas DataFrame plot with accurate formatting.
The above is the detailed content of How to Display Dates Correctly on the X-Axis of a Pandas DataFrame Line Plot?. For more information, please follow other related articles on the PHP Chinese website!