Skip to content

Update plotting functions to use the new Matplotlib default styles #15495

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

Closed
apcamargo opened this issue Feb 24, 2017 · 11 comments · Fixed by #16600
Closed

Update plotting functions to use the new Matplotlib default styles #15495

apcamargo opened this issue Feb 24, 2017 · 11 comments · Fixed by #16600
Labels
Milestone

Comments

@apcamargo
Copy link

In version 2.0.0, Matplotlib introduced several changes in it's default style. Pandas plotting functions should be updated to use the new style.

http://matplotlib.org/users/dflt_style_changes.html

@jorisvandenbossche
Copy link
Member

Can you give specific examples of where the plot needs to be updated? I don't think we are using much hard-coded style elements in the plot method.

If you are talking about the documentation (http://pandas.pydata.org/pandas-docs/stable/visualization.html), we are already using the style support of matplotlib, but using the 'ggplot' style instead of the default (but that is just for the docs, not for the default that users get when plotting). So for this, we could indeed switch to the default style again now this has been improved.

@apcamargo
Copy link
Author

One thing that I've noticed is that Pandas doesn't use the new behavior for axis limits:

Pandas:
pandas

Matplotlib:
matplotlib

@jorisvandenbossche
Copy link
Member

@apcamargo Thanks for the example.

Pandas does a set_xlim based on the data when plotting (see

ax.set_xlim(left, right)
), although I am not sure why this was initially done.
I thought this was because matplotlib did not do that automatically when you added more lines to an ax, but that does not seem to be the case (unless that was the case for older matplotlib versions).

cc @TomAugspurger @sinhrks do you know the reason(ing) for updating the xlims based on the data?

@TomAugspurger
Copy link
Contributor

I thought this was because matplotlib did not do that automatically when you added more lines to an ax, but that does not seem to be the case (unless that was the case for older matplotlib versions).

I think that's correct. IIRC this was changed in MPL 1.5ish. We could probably skip the set_xlim on newer version of matplotlib.

@jorisvandenbossche
Copy link
Member

@apcamargo Interested to make a PR to change this?
If you have other examples where we conflict with the new defaults, that is also always welcome

@TomAugspurger
Copy link
Contributor

TomAugspurger commented Feb 27, 2017 via email

@jorisvandenbossche
Copy link
Member

In that whatsnew entry, they talk about 'interactive usage', so will that updating of the axes not be the case in non-interactive usage? That's not fully clear to me, but important for pandas I think if we could remove the set_xlim.
I just tried, but still get updated xlims when not displaying the figure in the notebook but just saving it.

@apcamargo
Copy link
Author

apcamargo commented Feb 27, 2017

So, to fix this, the line ax.set_xlim(left, right) in plotting.py should be deleted. I've tested this change and the issue was fixed.
Should this behavior depend on the Matplotlib version?

@jreback jreback changed the title Update plotting functions tomuse the new Matplotlib default styles Update plotting functions to use the new Matplotlib default styles Feb 27, 2017
@TomAugspurger
Copy link
Contributor

Should this behavior depend on the Matplotlib version?

Yep. It should be in an if block that only applies to older versions. I think something like

if not self.mpl_ge_1_5_0():
    ax.set_xlim(left, right)

should work.

@jorisvandenbossche
Copy link
Member

We could also only do this for 2.0 and above to be safe (for lower versions it would also not have any impact, since the default xlim would be the same as what pandas now does).

nmartensen added a commit to nmartensen/pandas that referenced this issue Jun 5, 2017
 * Avoid setting xlims since recent matplotlib already does it correctly
 * and we should let it apply its default styles where possible (pandas-dev#15495)
nmartensen added a commit to nmartensen/pandas that referenced this issue Jun 10, 2017
 * Avoid setting xlims since recent matplotlib already does it correctly
 * and we should let it apply its default styles where possible (pandas-dev#15495)
nmartensen added a commit to nmartensen/pandas that referenced this issue Jun 10, 2017
 * Avoid setting xlims since recent matplotlib already does it correctly
 * and we should let it apply its default styles where possible
nmartensen added a commit to nmartensen/pandas that referenced this issue Jun 10, 2017
 * Avoid setting xlims since recent matplotlib already does it correctly
 * and we should let it apply its default styles where possible
nmartensen added a commit to nmartensen/pandas that referenced this issue Jul 19, 2017
 * Avoid setting xlims since recent matplotlib already does it correctly
 * and we should let it apply its default styles where possible
nmartensen added a commit to nmartensen/pandas that referenced this issue Sep 15, 2017
 * Avoid setting xlims since recent matplotlib already does it correctly
 * and we should let it apply its default styles where possible
TomAugspurger pushed a commit that referenced this issue Sep 19, 2017
* BUG: set correct xlims for lines (#11471, #11310)

 * Do not assume that xdata is sorted.
 * Use numpy.nanmin() and numpy.nanmax() instead.

* BUG: Let new MPL automatically determine xlims (#15495)

 * Avoid setting xlims since recent matplotlib already does it correctly
 * and we should let it apply its default styles where possible

* TST: plotting: update expected results for matplotlib 2

Matplotlib 2.0 uses new defaults that cause some of our tests to fail.
This adds appropriate new sets of expected results to the following
tests in tests/plotting/test_datetimelike.py:

test_finder_daily
test_finder_quarterly
test_finder_annual
test_finder_hourly
test_finder_minutely
test_finder_monthly
test_format_timedelta_ticks_narrow
test_format_timedelta_ticks_wide

* TST: plotting: Relax some tests to work with matplotlib 2.0

Matplotlib 2.0 by default now adds some padding between the boundaries
of the data and the boundaries of the plot. This causes some of our
tests to fail if we don't relax them slightly.

  modified:   pandas/tests/plotting/test_datetimelike.py
test_irregular_ts_shared_ax_xlim
test_mixed_freq_regular_first
test_mixed_freq_regular_first_df
test_secondary_y_irregular_ts_xlim
test_secondary_y_non_ts_xlim
test_secondary_y_regular_ts_xlim

  modified:   pandas/tests/plotting/test_frame.py
test_area_lim
test_line_lim

  modified:   pandas/tests/plotting/test_series.py
test_ts_area_lim
test_ts_line_lim

* TST: Add lineplot tests with unsorted x data

Two new tests check interaction of non-monotonic x data and xlims:
test_frame / test_unsorted_index_lims
test_series / test_unsorted_index_xlim

* DOC: lineplot/xlims whatsnew entry for v0.21.0
@jorisvandenbossche
Copy link
Member

Closed by #16600

@jorisvandenbossche jorisvandenbossche added this to the 0.21.0 milestone Sep 24, 2017
alanbato pushed a commit to alanbato/pandas that referenced this issue Nov 10, 2017
* BUG: set correct xlims for lines (pandas-dev#11471, pandas-dev#11310)

 * Do not assume that xdata is sorted.
 * Use numpy.nanmin() and numpy.nanmax() instead.

* BUG: Let new MPL automatically determine xlims (pandas-dev#15495)

 * Avoid setting xlims since recent matplotlib already does it correctly
 * and we should let it apply its default styles where possible

* TST: plotting: update expected results for matplotlib 2

Matplotlib 2.0 uses new defaults that cause some of our tests to fail.
This adds appropriate new sets of expected results to the following
tests in tests/plotting/test_datetimelike.py:

test_finder_daily
test_finder_quarterly
test_finder_annual
test_finder_hourly
test_finder_minutely
test_finder_monthly
test_format_timedelta_ticks_narrow
test_format_timedelta_ticks_wide

* TST: plotting: Relax some tests to work with matplotlib 2.0

Matplotlib 2.0 by default now adds some padding between the boundaries
of the data and the boundaries of the plot. This causes some of our
tests to fail if we don't relax them slightly.

  modified:   pandas/tests/plotting/test_datetimelike.py
test_irregular_ts_shared_ax_xlim
test_mixed_freq_regular_first
test_mixed_freq_regular_first_df
test_secondary_y_irregular_ts_xlim
test_secondary_y_non_ts_xlim
test_secondary_y_regular_ts_xlim

  modified:   pandas/tests/plotting/test_frame.py
test_area_lim
test_line_lim

  modified:   pandas/tests/plotting/test_series.py
test_ts_area_lim
test_ts_line_lim

* TST: Add lineplot tests with unsorted x data

Two new tests check interaction of non-monotonic x data and xlims:
test_frame / test_unsorted_index_lims
test_series / test_unsorted_index_xlim

* DOC: lineplot/xlims whatsnew entry for v0.21.0
No-Stream pushed a commit to No-Stream/pandas that referenced this issue Nov 28, 2017
* BUG: set correct xlims for lines (pandas-dev#11471, pandas-dev#11310)

 * Do not assume that xdata is sorted.
 * Use numpy.nanmin() and numpy.nanmax() instead.

* BUG: Let new MPL automatically determine xlims (pandas-dev#15495)

 * Avoid setting xlims since recent matplotlib already does it correctly
 * and we should let it apply its default styles where possible

* TST: plotting: update expected results for matplotlib 2

Matplotlib 2.0 uses new defaults that cause some of our tests to fail.
This adds appropriate new sets of expected results to the following
tests in tests/plotting/test_datetimelike.py:

test_finder_daily
test_finder_quarterly
test_finder_annual
test_finder_hourly
test_finder_minutely
test_finder_monthly
test_format_timedelta_ticks_narrow
test_format_timedelta_ticks_wide

* TST: plotting: Relax some tests to work with matplotlib 2.0

Matplotlib 2.0 by default now adds some padding between the boundaries
of the data and the boundaries of the plot. This causes some of our
tests to fail if we don't relax them slightly.

  modified:   pandas/tests/plotting/test_datetimelike.py
test_irregular_ts_shared_ax_xlim
test_mixed_freq_regular_first
test_mixed_freq_regular_first_df
test_secondary_y_irregular_ts_xlim
test_secondary_y_non_ts_xlim
test_secondary_y_regular_ts_xlim

  modified:   pandas/tests/plotting/test_frame.py
test_area_lim
test_line_lim

  modified:   pandas/tests/plotting/test_series.py
test_ts_area_lim
test_ts_line_lim

* TST: Add lineplot tests with unsorted x data

Two new tests check interaction of non-monotonic x data and xlims:
test_frame / test_unsorted_index_lims
test_series / test_unsorted_index_xlim

* DOC: lineplot/xlims whatsnew entry for v0.21.0
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
Projects
None yet
3 participants