3

I have a timeseries dataset of a month. I am plotting it using matplotlib in python however I am not able to display all the dates of a month on the x-axis. I want the x-axis to show full dates. The dataset looks something like this:

Date and Time Temperature
7/1/2022 0:00  25.4
7/1/2022 0:15  23.2
7/1/2022 0:30  22.5
7/1/2022 0:45  23
7/1/2022 1:00  22.3
7/1/2022 1:15  22

And here is my code for plotting the data:

fig, ax = plt.subplots(figsize=(25, 10))

df_0.plot(kind='line', x='Date and Time', y='Temperature', ax=ax, label='Week 1')

df_1.plot(kind='line', x='Date and Time', y='Temperature', ax=ax, label='Week 2')

df_2.plot(kind='line', x='Date and Time', y='Temperature', ax=ax, label='Week 3')

df_3.plot(kind='line', x='Date and Time', y='Temperature', ax=ax, label='Week 4')

df_4.plot(kind='line', x='Date and Time', y='Temperature', ax=ax, label='Week 5')

plt.xlabel('Date and Time of the month - July')
plt.ylabel('Temperature')

ax.xaxis.set_major_formatter(mdates.DateFormatter("%m.%d.%Y"))

ax.xaxis.set_major_locator(mdates.DayLocator(interval=1))

plt.gcf().autofmt_xdate()

plt.show()

The data I has was in one single dataframe. I divided into different dataframes in order plot it on a weekly basis. Here is the output: enter image description here

I have tried using ax.axis method, DateFormatter and DayLocator however none of these is having any effect on the graph. I want the axis to show full dates like 22-07-2022 etc. And I can confirm that the Date and Time column is in datetime format.

1
  • It works if you just use pyplot.plt so it is related with how pandas handles the plot, as @FObersteiner says Commented Jan 26, 2023 at 9:45

1 Answer 1

1

Convert the date/time column to datetime data type, then use x_compat = True to enforce Python datetime compatibility, which in turn allows to use mdates formatter correctly.

Given

df
   Date and Time  Temperature
0  7/1/2022 0:00         25.4
1  7/1/2022 0:15         23.2
2  7/1/2022 0:30         22.5
3  7/1/2022 0:45         23.0
4  7/1/2022 1:00         22.3
5  7/1/2022 1:15         22.0

that can look like

df['Date and Time'] = pd.to_datetime(df['Date and Time'], format="%m/%d/%Y %H:%M")

fig, ax = plt.subplots(figsize=(25, 10))

df.plot(kind='line', x='Date and Time', y='Temperature', ax=ax, label='Week 1',
        x_compat=True)

plt.xlabel('Date and Time of the month - July')
plt.ylabel('Temperature')

ax.xaxis.set_major_formatter(mdates.DateFormatter("%m.%d.%Y"))
ax.xaxis.set_major_locator(mdates.DayLocator(interval=1))

plt.show()

enter image description here

Sign up to request clarification or add additional context in comments.

2 Comments

I am getting error NameError: name 'mdates' is not defined
@user1700890 mdates is part of matplotlib's dates module; you can import it like import matplotlib.dates as mdates

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.