Thanks to visit codestin.com
Credit goes to github.com

Skip to content

Add test_barh to test_datetime.py #27084

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

Merged
merged 4 commits into from
Oct 18, 2023
Merged

Conversation

CozyFrog
Copy link
Contributor

PR summary

I have added a datetime/timedelta smoke test for Axes.barh in lib/matplotlib/tests/test_datetime.py.
This addresses the Axes.barh task from #26864.

The image below is the plot generated from this smoke test/example code.
barh_smoke_test

PR checklist

Copy link

@github-actions github-actions bot left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Thank you for opening your first PR into Matplotlib!

If you have not heard from us in a week or so, please leave a new comment below and that should bring it to our attention. Most of our reviewers are volunteers and sometimes things fall through the cracks.

You can also join us on gitter for real-time discussion.

For details on testing, writing docs, and our review process, please see the developer guide

We strive to be a welcoming and open project. Please follow our Code of Conduct.

Copy link
Member

@ksunden ksunden left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

See comment from #27033 (review):

(Copied here for convenience, note that it was written originally for bar, so swap horizontal/vertical etc, but the sentiment is the same)

I think the bar graphs with dates on the vertical (for bar, horizonatal for barh) axis should be given a bit more care here. That there is an implicit 0 mark, which results in 1970-01-01 is not a particularly good representation of a bar plot.

I think that for this, there should be a bottom argument specified as a datetime and then using a timedelta instead of a datetime for the heights, as indicated by the bar docstring

Here is some code I wrote for someone who had started working on this but never opened a PR:

import matplotlib.pyplot as plt
import numpy as np
from datetime import datetime, timedelta
import matplotlib as mpl

mpl.rcParams["date.converter"] = 'concise'
fig, (ax1, ax2) = plt.subplots(2, 1, layout='constrained')
price_date = np.array([  datetime(2020, 6, 30),
                datetime(2020, 7, 22),
                datetime(2020, 8, 3),
                datetime(2020, 9, 14)], dtype=np.datetime64)

price_close = [8800, 2600, 8500, 7400]
start_date = np.datetime64(datetime(2020, 6, 1))

ax1.bar(price_date, price_close, width=np.timedelta64(4, "D"))
ax2.bar(np.arange(4), price_date-start_date, bottom=start_date)

Note the start_date and price_date-start_date in this example.

@ksunden
Copy link
Member

ksunden commented Oct 13, 2023

I would also rather explictly avoid having the times be in 1970 to make sure we arent falling into certain traps with datetimes.

@CozyFrog
Copy link
Contributor Author

Thank you so much for your notes and sample code, I appreciate the help!

@CozyFrog
Copy link
Contributor Author

I have made a few fixes.

  • The test now consists of two subplots; one passes datetime and timedelta arguments to the y and height parameters respectively, and the other passes timedelta and datetime arguments to the width and left parameters respectively.
  • The times are in 2020 now to avoid any datetime traps.

Below is an image of the new test:
barh_smoke_test_second_pr

@QuLogic QuLogic merged commit 9db1bca into matplotlib:main Oct 18, 2023
@QuLogic
Copy link
Member

QuLogic commented Oct 18, 2023

Thanks @CozyFrog! Congratulations on your first PR to Matplotlib 🎉 We hope to hear from you again.

@CozyFrog CozyFrog deleted the tst/dt-unit-test branch October 18, 2023 19:27
@QuLogic QuLogic added this to the v3.9.0 milestone Oct 25, 2023
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Projects
Development

Successfully merging this pull request may close these issues.

4 participants