-
-
Notifications
You must be signed in to change notification settings - Fork 7.9k
3.3.0: possible regression/bug with DateFormatter? #18010
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Comments
https://matplotlib.org/3.3.0/users/whats_new.html#dates-use-a-modern-epoch But I don't understand why your dates, which seem to be just |
If you do import matplotlib.dates as mdates
import datetime
print(mdates.get_epoch())
print(mdates.date2num(datetime.datetime(2020, 1, 1))) and report the results, that would be useful. For me I get
|
yep, same:
|
could be some outdated rcparams?
|
The relevant new rcParam is Is it something funny in your env? What happens if you simplify this to: import matplotlib.pyplot as plt
import matplotlib.dates as mdates
import datetime
import numpy as np
print(mdates.get_epoch())
print(mdates.date2num(datetime.datetime(2020, 1, 1)))
dates = {datetime.datetime(2016, 2, 1, 0, 0): datetime.datetime(2015, 10, 1, 0, 0), datetime.datetime(2020, 6, 1, 0, 0): datetime.datetime(2017, 11, 8, 0, 0), datetime.datetime(2017, 8, 1, 0, 0): datetime.datetime(2017, 8, 1, 0, 0), datetime.datetime(2018, 4, 1, 0, 0): datetime.datetime(2018, 4, 1, 0, 0), datetime.datetime(2020, 8, 1, 0, 0): datetime.datetime(2019, 4, 1, 0, 0), datetime.datetime(2019, 11, 1, 0, 0): datetime.datetime(2019, 11, 1, 0, 0), datetime.datetime(2019, 9, 1, 0, 0): datetime.datetime(2016, 7, 1, 0, 0), datetime.datetime(2019, 5, 1, 0, 0): datetime.datetime(2019, 5, 1, 0, 0), datetime.datetime(2018, 6, 1, 0, 0): datetime.datetime(2018, 6, 1, 0, 0), datetime.datetime(2020, 1, 1, 0, 0): datetime.datetime(2020, 1, 1, 0, 0), datetime.datetime(2018, 2, 1, 0, 0): datetime.datetime(2018, 2, 1, 0, 0), datetime.datetime(2017, 7, 1, 0, 0): datetime.datetime(2017, 6, 8, 0, 0), datetime.datetime(2017, 12, 1, 0, 0): datetime.datetime(2017, 12, 1, 0, 0), datetime.datetime(2017, 9, 1, 0, 0): datetime.datetime(2017, 9, 1, 0, 0), datetime.datetime(2019, 1, 1, 0, 0): datetime.datetime(2019, 1, 1, 0, 0), datetime.datetime(2019, 3, 1, 0, 0): datetime.datetime(2019, 3, 1, 0, 0), datetime.datetime(2016, 9, 1, 0, 0): datetime.datetime(2016, 5, 1, 0, 0), datetime.datetime(2018, 10, 1, 0, 0): datetime.datetime(2018, 10, 1, 0, 0), datetime.datetime(2016, 12, 1, 0, 0): datetime.datetime(2016, 7, 1, 0, 0), datetime.datetime(2016, 4, 1, 0, 0): datetime.datetime(2016, 2, 15, 0, 0), datetime.datetime(2018, 8, 1, 0, 0): datetime.datetime(2018, 8, 1, 0, 0), datetime.datetime(2015, 11, 1, 0, 0): datetime.datetime(2015, 8, 15, 0, 0), datetime.datetime(2019, 7, 1, 0, 0): datetime.datetime(2019, 7, 1, 0, 0), datetime.datetime(2018, 5, 1, 0, 0): datetime.datetime(2018, 5, 1, 0, 0), datetime.datetime(2017, 10, 1, 0, 0): datetime.datetime(2017, 10, 1, 0, 0), datetime.datetime(2015, 12, 1, 0, 0): datetime.datetime(2015, 9, 1, 0, 0), datetime.datetime(2020, 2, 1, 0, 0): datetime.datetime(2020, 2, 1, 0, 0), datetime.datetime(2016, 7, 1, 0, 0): datetime.datetime(2016, 3, 1, 0, 0), datetime.datetime(2016, 3, 1, 0, 0): datetime.datetime(2016, 1, 1, 0, 0), datetime.datetime(2019, 10, 1, 0, 0): datetime.datetime(2019, 10, 1, 0, 0), datetime.datetime(2020, 5, 1, 0, 0): datetime.datetime(2017, 1, 1, 0, 0), datetime.datetime(2019, 2, 1, 0, 0): datetime.datetime(2019, 2, 1, 0, 0), datetime.datetime(2019, 4, 1, 0, 0): datetime.datetime(2019, 4, 1, 0, 0), datetime.datetime(2018, 11, 1, 0, 0): datetime.datetime(2018, 11, 1, 0, 0), datetime.datetime(2017, 5, 1, 0, 0): datetime.datetime(2017, 3, 15, 0, 0), datetime.datetime(2019, 6, 1, 0, 0): datetime.datetime(2019, 6, 1, 0, 0), datetime.datetime(2017, 1, 1, 0, 0): datetime.datetime(2016, 8, 1, 0, 0), datetime.datetime(2018, 3, 1, 0, 0): datetime.datetime(2018, 3, 1, 0, 0), datetime.datetime(2020, 4, 1, 0, 0): datetime.datetime(2017, 1, 1, 0, 0), datetime.datetime(2018, 1, 1, 0, 0): datetime.datetime(2018, 1, 1, 0, 0), datetime.datetime(2017, 11, 1, 0, 0): datetime.datetime(2017, 11, 1, 0, 0), datetime.datetime(2020, 3, 1, 0, 0): datetime.datetime(2017, 1, 1, 0, 0), datetime.datetime(2017, 2, 1, 0, 0): datetime.datetime(2016, 10, 1, 0, 0), datetime.datetime(2016, 6, 1, 0, 0): datetime.datetime(2016, 2, 15, 0, 0), datetime.datetime(2016, 10, 1, 0, 0): datetime.datetime(2016, 6, 1, 0, 0), datetime.datetime(2020, 7, 1, 0, 0): datetime.datetime(2018, 4, 15, 0, 0), datetime.datetime(2017, 6, 1, 0, 0): datetime.datetime(2017, 4, 15, 0, 0), datetime.datetime(2018, 12, 1, 0, 0): datetime.datetime(2018, 12, 1, 0, 0), datetime.datetime(2018, 7, 1, 0, 0): datetime.datetime(2018, 7, 1, 0, 0), datetime.datetime(2016, 11, 1, 0, 0): datetime.datetime(2016, 7, 1, 0, 0), datetime.datetime(2016, 1, 1, 0, 0): datetime.datetime(2015, 10, 1, 0, 0), datetime.datetime(2016, 8, 1, 0, 0): datetime.datetime(2016, 3, 15, 0, 0), datetime.datetime(2019, 12, 1, 0, 0): datetime.datetime(2019, 12, 1, 0, 0), datetime.datetime(2016, 5, 1, 0, 0): datetime.datetime(2016, 2, 15, 0, 0), datetime.datetime(2015, 10, 1, 0, 0): datetime.datetime(2015, 8, 15, 0, 0), datetime.datetime(2017, 4, 1, 0, 0): datetime.datetime(2017, 2, 15, 0, 0), datetime.datetime(2017, 3, 1, 0, 0): datetime.datetime(2016, 12, 1, 0, 0), datetime.datetime(2019, 8, 1, 0, 0): datetime.datetime(2016, 7, 1, 0, 0), datetime.datetime(2018, 9, 1, 0, 0): datetime.datetime(2016, 11, 1, 0, 0)}
plt.plot(sorted(dates.keys()), np.arange(len(dates)))
plt.show() from your ipython shell does it still give the strange dates? EDIT: they're not strange, they are just 1970 years too far in the future. ie the datenum is coming out as one that has the old epoch, but then getting converted back using the new one. |
Also can't hurt to make sure this roundtrips:
|
|
(if you prefer a different way to debug this, like maybe on discord or smth, just let me know :) ) |
loc = mdates.AutoDateLocator()
formatter = mdates.AutoDateFormatter(loc)
print(formatter(18262.0)) Gives me |
BTW, not sure if discord would help, and this is fine for tracking the issue. OTOH, I'm not sure what else I can do. It'd be good if you could reproduce on a fresh env. If I do |
:( |
so i tried in a separate docker container with a bare minimal debian system, and... i get the correct date with the example at #18010 (comment) hmmmm what could possibly going on? is there something i should be checking in this container and compare with my system? |
weirder and weirder: if i restart ipython, i get the right dates too! but i run the original script from the command-line, still 3989 .... |
That is strange - seems like a crossed-up install, but not sure I understand why. I guess you could put the print statements above into a script and run from the command line. |
|
ok, it looks like i may have had to pay more attention to the message on the console:
that's produced when executing the script on console: is this our smoking gun? |
Yes; Epoch2num was not updated to the new epoch. So this will be closed by a PR from yesterday. But I still don't 100% understand because you are explicitly using matplotlib's formatter. |
@sandrotosi so was one of your pandas pre 1.0.0? I think all this speaks to getting #17983 in a release as soon as possible to address this conflict, at least for folks using older pandas. See also pandas-dev/pandas#35350, pandas-dev/pandas#34850, and pandas-dev/pandas#35361 |
yes, on my system i have pandas/0.25.3 while there is no pandas installed in the container
lemme apply that patch (hoping it applies cleanly on top of 3.3.0) to the debian package and re-try; will update as soon as the build process finishes so... not very soon :) |
yep that was it: with that PR applied on top of 3.3.0, the script now works fine. i'm gonna upload the fix to Debian, but I agree a .1 with that patch released officially would be ideal -- thanks for debugging this with me! |
Can someone unpack this thread? What is the final outcome as it stands? |
tldr; for those landing here. Using matplotlib master fixes this. |
Closing, as this will be fixed in 3.3.1. |
Just for posterity sake, the workaround is to manually specify the old pre-3.3.0 epoch in your script.
|
Hello,
i have this code that worked fine until mpl 3.3.0; now if you run it, it generate this image - notice the X axes tick labels, 3989? that's supposed to be 2020 :) (for comparison you can look at last month image )
Is there anything wrong with that code i was using or is there a bug/regression in mpl?
thanks!
The text was updated successfully, but these errors were encountered: