python-data-visualization icon indicating copy to clipboard operation
python-data-visualization copied to clipboard

`ticker.StrMethodFormatter("{x:0.0f}")` appears to obscure rather than clean year values

Open dcronkite opened this issue 3 years ago • 1 comments

On, e.g., ch3-ex2 and ch4-ex1, a string formatter is used to 'format' years on the x-axis which would otherwise appear as decimals (2015.0 -> 2015, 2017.5 -> 2018). This, however, appears to distort the actual x-axis labels, showing '2018' when at the spot which ought to be labeled '2017.5'.

You can see this from the following 2 code snippets using chapter3-example2, cell 8 (note the difference in the 2017.5 and 2018 labels which point to the same location):

fig, ax = plt.subplots()
ax.plot(avg_by_year.year, avg_by_year.comb08)
ax.xaxis.set_major_formatter(ticker.StrMethodFormatter('{x:0.0f}'))

with_decimal

fig, ax = plt.subplots()
ax.plot(avg_by_year.year, avg_by_year.comb08)
ax.xaxis.set_major_formatter(ticker.StrMethodFormatter('{x:0.1f}'))

without_decimal

I think the correct code to avoid the '20XX.5' in years might be something like ax.set_xticks(np.arange(2000, 2020, 2))?

dcronkite avatar Oct 01 '22 03:10 dcronkite

Ah. Great catch! Thanks for pointing this out. I definitely didn't catch this.

You're correct the np.arange() code your using is a good alternative. I'm going to also look through the Matplotlib docs and see if something here might be a good alternative that is more "date-aware" https://matplotlib.org/stable/api/dates_api.html

I'm going to keep this open until I figure out the best approach and how to update the course.

Thanks again!

chris1610 avatar Oct 01 '22 15:10 chris1610