'How do I construct ticks and labels when ploting large temporal series with matplotlib where the dates are a str column?

I have a pandas data series to display that contains basically a temporal series where each observation is contained in df['date'] (x-axis) and df['value'] (y-axis):

df['date']

0       2004-01-02
1       2004-01-05
2       2004-01-06
3       2004-01-07
4       2004-01-08
           ...    
4527    2021-12-27
4528    2021-12-28
4529    2021-12-29
4530    2021-12-30
4531    2021-12-31
Name: session, Length: 4532, dtype: object

Notice how the Series contains str types:

print(type(df['date'].values[0]))

<class 'str'>

df['values'] are just integers.


If I plot the series using matplotlib and try to use df['date'] I obtain a too dense chart where the xtick labels can not be read:

ax.plot(df['date'], df['value']);

Dense Plot

If I want to display xticks on every month change (so 2004/01, 2004/02, .... 2021/11, 2021/12) and labels just when the year changes (2004, 2005, ... 2021), which would be the best way to accomplish that either via numpy or pandas to get the arrays that .set_xticks require?



Solution 1:[1]

Just to further elaborate on tdy's comment (all credit on the answer to tdy), this is the code excerpt to implement to_datetime and use the locators:

ax.plot(pd.to_datetime(df['date']), df['value'])
ax.xaxis.set_major_locator(mdates.YearLocator())
ax.xaxis.set_major_formatter(mdates.DateFormatter('%Y'))

Sources

This article follows the attribution requirements of Stack Overflow and is licensed under CC BY-SA 3.0.

Source: Stack Overflow

Solution Source
Solution 1