Try matplotlib RC
State: closed

Don't want to merge this.

Labels:
name: Visualization
description: plotting
name: Compat
description: pandas objects compatability with Numpy or Python functions

Comments:
@TomAugspurger : Not sure what your intention with this PR is, but we could just have more `allow fail` builds with one against `matplotlib` master.
NO

FYI the point of the marked allow_fail builds is not to actually allow them to fail
rather to have a successful build show green quicker 

all builds must succeed - if they r unstable or unexplained that is a problem
@jreback : I do understand the point of the `allow_fail` for `pandas`, but my point is that it would allow us to catch problems with project dependencies earlier without necessarily blocking PR's.  That being said, I'm still not sure what @TomAugspurger was trying to do with this PR, so it might be moot.
> That being said, I'm still not sure what @TomAugspurger was trying to do with this PR, so it might be moot.

I think Tom is just doing what the title says: try out the rc of matplotlib. To see whether things are breaking, to know if we need to take action to fix things in pandas or report issues upstream.
And so there are 3 failures:

```
=================================== FAILURES ===================================
________________ TestTSPlot.test_format_timedelta_ticks_narrow _________________
[gw1] linux -- Python 3.6.4 /home/travis/miniconda3/envs/pandas/bin/python
self = <pandas.tests.plotting.test_datetimelike.TestTSPlot object at 0x7fdb10497160>
    def test_format_timedelta_ticks_narrow(self):
        if is_platform_mac():
            pytest.skip("skip on mac for precision display issue on older mpl")
    
        if self.mpl_ge_2_0_0:
            expected_labels = [''] + [
                '00:00:00.00000000{:d}'.format(2 * i)
                for i in range(5)] + ['']
        else:
            expected_labels = [
                '00:00:00.00000000{:d}'.format(i)
                for i in range(10)]
    
        rng = timedelta_range('0', periods=10, freq='ns')
        df = DataFrame(np.random.randn(len(rng), 3), rng)
        fig, ax = self.plt.subplots()
        df.plot(fontsize=2, ax=ax)
        fig.canvas.draw()
        labels = ax.get_xticklabels()
        assert len(labels) == len(expected_labels)
        for l, l_expected in zip(labels, expected_labels):
>           assert l.get_text() == l_expected
E           AssertionError: assert '-1 days 23:59:59.999999998' == ''
E             - -1 days 23:59:59.999999998
pandas/tests/plotting/test_datetimelike.py:1363: AssertionError
_________________ TestTSPlot.test_format_timedelta_ticks_wide __________________
[gw1] linux -- Python 3.6.4 /home/travis/miniconda3/envs/pandas/bin/python
self = <pandas.tests.plotting.test_datetimelike.TestTSPlot object at 0x7fdb0fa10208>
    def test_format_timedelta_ticks_wide(self):
        if is_platform_mac():
            pytest.skip("skip on mac for precision display issue on older mpl")
    
        if self.mpl_ge_2_0_0:
            expected_labels = [
                '',
                '00:00:00',
                '1 days 03:46:40',
                '2 days 07:33:20',
                '3 days 11:20:00',
                '4 days 15:06:40',
                '5 days 18:53:20',
                '6 days 22:40:00',
                '8 days 02:26:40',
                '9 days 06:13:20',
                ''
            ]
        else:
            expected_labels = [
                '00:00:00',
                '1 days 03:46:40',
                '2 days 07:33:20',
                '3 days 11:20:00',
                '4 days 15:06:40',
                '5 days 18:53:20',
                '6 days 22:40:00',
                '8 days 02:26:40',
                ''
            ]
    
        rng = timedelta_range('0', periods=10, freq='1 d')
        df = DataFrame(np.random.randn(len(rng), 3), rng)
        fig, ax = self.plt.subplots()
        ax = df.plot(fontsize=2, ax=ax)
        fig.canvas.draw()
        labels = ax.get_xticklabels()
        assert len(labels) == len(expected_labels)
        for l, l_expected in zip(labels, expected_labels):
>           assert l.get_text() == l_expected
E           AssertionError: assert '-2 days 20:13:20' == ''
E             - -2 days 20:13:20
pandas/tests/plotting/test_datetimelike.py:1404: AssertionError
______________________ TestDataFramePlots.test_plain_axes ______________________
[gw1] linux -- Python 3.6.4 /home/travis/miniconda3/envs/pandas/bin/python
self = <pandas.tests.plotting.test_frame.TestDataFramePlots object at 0x7fdb08abcc18>
    def test_plain_axes(self):
    
        # supplied ax itself is a SubplotAxes, but figure contains also
        # a plain Axes object (GH11556)
        fig, ax = self.plt.subplots()
        fig.add_axes([0.2, 0.2, 0.2, 0.2])
        Series(rand(10)).plot(ax=ax)
    
        # suppliad ax itself is a plain Axes, but because the cmap keyword
        # a new ax is created for the colorbar -> also multiples axes (GH11520)
        df = DataFrame({'a': randn(8), 'b': randn(8)})
        fig = self.plt.figure()
        ax = fig.add_axes((0, 0, 1, 1))
>       df.plot(kind='scatter', ax=ax, x='a', y='b', c='a', cmap='hsv')
pandas/tests/plotting/test_frame.py:2846: 
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 
pandas/plotting/_core.py:2693: in __call__
    sort_columns=sort_columns, **kwds)
pandas/plotting/_core.py:1909: in plot_frame
    **kwds)
pandas/plotting/_core.py:1736: in _plot
    plot_obj.generate()
pandas/plotting/_core.py:252: in generate
    self._make_plot()
pandas/plotting/_core.py:877: in _make_plot
    self.fig.colorbar(img, **kws)
../../../miniconda3/envs/pandas/lib/python3.6/site-packages/matplotlib/figure.py:2062: in colorbar
    cax, kw = cbar.make_axes(ax, **kw)
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 
parents = array([<matplotlib.axes._axes.Axes object at 0x7fdb0efd2908>],
      dtype=object)
location = 'right', orientation = None, fraction = 0.15, shrink = 1.0
aspect = 20
kw = {'label': 'a', 'orientation': 'vertical', 'ticklocation': 'right'}
locations = ['left', 'right', 'top', 'bottom']
default_location_settings = {'bottom': {'anchor': (0.5, 1.0), 'orientation': 'horizontal', 'pad': 0.15, 'panchor': (0.5, 0.0)}, 'left': {'anchor':...'panchor': (1.0, 0.5)}, 'top': {'anchor': (0.5, 0.0), 'orientation': 'horizontal', 'pad': 0.05, 'panchor': (0.5, 1.0)}}
loc_settings = {'anchor': (0.0, 0.5), 'orientation': 'vertical', 'pad': 0.05, 'panchor': (1.0, 0.5)}
anchor = (0.0, 0.5), parent_anchor = (1.0, 0.5)
    @docstring.Substitution(make_axes_kw_doc)
    def make_axes(parents, location=None, orientation=None, fraction=0.15,
                  shrink=1.0, aspect=20, **kw):
        '''
        Resize and reposition parent axes, and return a child
        axes suitable for a colorbar.
    
        Keyword arguments may include the following (with defaults):
    
            location : [None|'left'|'right'|'top'|'bottom']
                The position, relative to **parents**, where the colorbar axes
                should be created. If None, the value will either come from the
                given ``orientation``, else it will default to 'right'.
    
            orientation :  [None|'vertical'|'horizontal']
                The orientation of the colorbar. Typically, this keyword shouldn't
                be used, as it can be derived from the ``location`` keyword.
    
        %s
    
        Returns (cax, kw), the child axes and the reduced kw dictionary to be
        passed when creating the colorbar instance.
        '''
        locations = ["left", "right", "top", "bottom"]
        if orientation is not None and location is not None:
            raise TypeError('position and orientation are mutually exclusive. '
                            'Consider setting the position to any of {}'
                            .format(', '.join(locations)))
    
        # provide a default location
        if location is None and orientation is None:
            location = 'right'
    
        # allow the user to not specify the location by specifying the
        # orientation instead
        if location is None:
            location = 'right' if orientation == 'vertical' else 'bottom'
    
        if location not in locations:
            raise ValueError('Invalid colorbar location. Must be one '
                             'of %s' % ', '.join(locations))
    
        default_location_settings = {'left':   {'anchor': (1.0, 0.5),
                                                'panchor': (0.0, 0.5),
                                                'pad': 0.10,
                                                'orientation': 'vertical'},
                                     'right':  {'anchor': (0.0, 0.5),
                                                'panchor': (1.0, 0.5),
                                                'pad': 0.05,
                                                'orientation': 'vertical'},
                                     'top':    {'anchor': (0.5, 0.0),
                                                'panchor': (0.5, 1.0),
                                                'pad': 0.05,
                                                'orientation': 'horizontal'},
                                     'bottom': {'anchor': (0.5, 1.0),
                                                'panchor': (0.5, 0.0),
                                                'pad': 0.15,  # backwards compat
                                                'orientation': 'horizontal'},
                                     }
    
        loc_settings = default_location_settings[location]
    
        # put appropriate values into the kw dict for passing back to
        # the Colorbar class
        kw['orientation'] = loc_settings['orientation']
        kw['ticklocation'] = location
    
        anchor = kw.pop('anchor', loc_settings['anchor'])
        parent_anchor = kw.pop('panchor', loc_settings['panchor'])
    
        # turn parents into a list if it is not already. We do this w/ np
        # because `plt.subplots` can return an ndarray and is natural to
        # pass to `colorbar`.
        parents = np.atleast_1d(parents).ravel()
    
        # check if using constrained_layout:
>       gs = parents[0].get_subplotspec().get_gridspec()
E       AttributeError: 'Axes' object has no attribute 'get_subplotspec'
../../../miniconda3/envs/pandas/lib/python3.6/site-packages/matplotlib/colorbar.py:1135: AttributeError
```

@TomAugspurger The `SLOW=true` ones don't have seemed to pick up the rc version of matplotlib though
> I think Tom is just doing what the title says: try out the rc of matplotlib. To see whether things are breaking, to know if we need to take action to fix things in pandas or report issues upstream.

Sure, but I was slightly confused by the execution, hence why I had suggested that we could add a build that runs against `matplotlib` master.
I don't think the occasional failures from churn on MPL master would be worth it. Testing against RCs seems fine.

> The SLOW=true ones don't have seemed to pick up the rc version of matplotlib though

Saw that, not sure why yet. Will repush, and see if I can try it out locally.

Lazy ping to @tacaswell, I haven't read the release notes yet. Do any of the failures in https://github.com/pandas-dev/pandas/pull/19702#issuecomment-365856279 concern you?
Also lots of warnings, some from us, some from matplotlib

<details>

```
pandas/tests/plotting/test_frame.py::TestDataFramePlots::()::test_subplots_multiple_axes
  /Users/taugspurger/Envs/pandas-dev/lib/python3.6/site-packages/pandas/pandas/plotting/_tools.py:204: UserWarning: When passing multiple axes, layout keyword is ignored
    "ignored", UserWarning)

pandas/tests/plotting/test_frame.py::TestDataFramePlots::()::test_hist_df
  /Users/taugspurger/Envs/pandas-dev/lib/python3.6/site-packages/matplotlib/axes/_axes.py:6444: UserWarning: The 'normed' kwarg is deprecated, and has been replaced by the 'density' kwarg.
    warnings.warn("The 'normed' kwarg is deprecated, and has been "

pandas/tests/plotting/test_frame.py::TestDataFramePlots::()::test_line_colors
  /Users/taugspurger/Envs/pandas-dev/lib/python3.6/site-packages/pandas/pandas/plotting/_core.py:186: UserWarning: 'colors' is being deprecated. Please use 'color'instead of 'colors'
    warnings.warn(("'colors' is being deprecated. Please use 'color'"

pandas/tests/plotting/test_frame.py::TestDataFramePlots::()::test_errorbar_plot
  /Users/taugspurger/Envs/pandas-dev/lib/python3.6/site-packages/pandas/pandas/plotting/_core.py:1736: UserWarning: To output multiple subplots, the figure containing the passed axes is being cleared
    plot_obj.generate()
  /Users/taugspurger/Envs/pandas-dev/lib/python3.6/site-packages/pandas/pandas/plotting/_core.py:1736: UserWarning: To output multiple subplots, the figure containing the passed axes is being cleared
    plot_obj.generate()
  /Users/taugspurger/Envs/pandas-dev/lib/python3.6/site-packages/pandas/pandas/plotting/_core.py:1736: UserWarning: To output multiple subplots, the figure containing the passed axes is being cleared
    plot_obj.generate()

pandas/tests/plotting/test_frame.py::TestDataFramePlots::()::test_errorbar_timeseries
  /Users/taugspurger/Envs/pandas-dev/lib/python3.6/site-packages/pandas/pandas/plotting/_core.py:1736: UserWarning: To output multiple subplots, the figure containing the passed axes is being cleared
    plot_obj.generate()
  /Users/taugspurger/Envs/pandas-dev/lib/python3.6/site-packages/pandas/pandas/plotting/_core.py:1736: UserWarning: To output multiple subplots, the figure containing the passed axes is being cleared
    plot_obj.generate()
  /Users/taugspurger/Envs/pandas-dev/lib/python3.6/site-packages/pandas/pandas/plotting/_core.py:1736: UserWarning: To output multiple subplots, the figure containing the passed axes is being cleared
    plot_obj.generate()

pandas/tests/plotting/test_hist_method.py::TestSeriesPlots::()::test_hist_legacy
  /Users/taugspurger/Envs/pandas-dev/lib/python3.6/site-packages/matplotlib/cbook/deprecation.py:107: MatplotlibDeprecationWarning: Adding an axes using the same arguments as a previous axes currently reuses the earlier instance.  In a future version, a new instance will always be created and returned.  Meanwhile, this warning can be suppressed, and the future behavior ensured, by passing a unique label to each axes instance.
    warnings.warn(message, mplDeprecation, stacklevel=1)
  /Users/taugspurger/Envs/pandas-dev/lib/python3.6/site-packages/matplotlib/cbook/deprecation.py:107: MatplotlibDeprecationWarning: Adding an axes using the same arguments as a previous axes currently reuses the earlier instance.  In a future version, a new instance will always be created and returned.  Meanwhile, this warning can be suppressed, and the future behavior ensured, by passing a unique label to each axes instance.
    warnings.warn(message, mplDeprecation, stacklevel=1)
  /Users/taugspurger/Envs/pandas-dev/lib/python3.6/site-packages/matplotlib/cbook/deprecation.py:107: MatplotlibDeprecationWarning: Adding an axes using the same arguments as a previous axes currently reuses the earlier instance.  In a future version, a new instance will always be created and returned.  Meanwhile, this warning can be suppressed, and the future behavior ensured, by passing a unique label to each axes instance.
    warnings.warn(message, mplDeprecation, stacklevel=1)
  /Users/taugspurger/Envs/pandas-dev/lib/python3.6/site-packages/matplotlib/cbook/deprecation.py:107: MatplotlibDeprecationWarning: Adding an axes using the same arguments as a previous axes currently reuses the earlier instance.  In a future version, a new instance will always be created and returned.  Meanwhile, this warning can be suppressed, and the future behavior ensured, by passing a unique label to each axes instance.
    warnings.warn(message, mplDeprecation, stacklevel=1)
  /Users/taugspurger/Envs/pandas-dev/lib/python3.6/site-packages/matplotlib/cbook/deprecation.py:107: MatplotlibDeprecationWarning: Adding an axes using the same arguments as a previous axes currently reuses the earlier instance.  In a future version, a new instance will always be created and returned.  Meanwhile, this warning can be suppressed, and the future behavior ensured, by passing a unique label to each axes instance.
    warnings.warn(message, mplDeprecation, stacklevel=1)
  /Users/taugspurger/Envs/pandas-dev/lib/python3.6/site-packages/matplotlib/cbook/deprecation.py:107: MatplotlibDeprecationWarning: Adding an axes using the same arguments as a previous axes currently reuses the earlier instance.  In a future version, a new instance will always be created and returned.  Meanwhile, this warning can be suppressed, and the future behavior ensured, by passing a unique label to each axes instance.
    warnings.warn(message, mplDeprecation, stacklevel=1)

pandas/tests/plotting/test_hist_method.py::TestDataFramePlots::()::test_hist_df_legacy
  /Users/taugspurger/Envs/pandas-dev/lib/python3.6/site-packages/matplotlib/axes/_axes.py:6444: UserWarning: The 'normed' kwarg is deprecated, and has been replaced by the 'density' kwarg.
    warnings.warn("The 'normed' kwarg is deprecated, and has been "

pandas/tests/plotting/test_hist_method.py::TestDataFramePlots::()::test_tight_layout
  /Users/taugspurger/Envs/pandas-dev/lib/python3.6/site-packages/pandas/pandas/tests/plotting/test_hist_method.py:248: UserWarning: To output multiple subplots, the figure containing the passed axes is being cleared
    _check_plot_works(df.hist)

pandas/tests/plotting/test_hist_method.py::TestDataFrameGroupByPlots::()::test_grouped_hist_legacy
  /Users/taugspurger/Envs/pandas-dev/lib/python3.6/site-packages/matplotlib/axes/_axes.py:6444: UserWarning: The 'normed' kwarg is deprecated, and has been replaced by the 'density' kwarg.
    warnings.warn("The 'normed' kwarg is deprecated, and has been "

pandas/tests/plotting/test_misc.py::TestSeriesPlots::()::test_autocorrelation_plot
  /Users/taugspurger/Envs/pandas-dev/lib/python3.6/site-packages/matplotlib/pyplot.py:984: UserWarning: Requested projection is different from current axis projection, creating new axis with requested projection.
    return gcf().gca(**kwargs)
  /Users/taugspurger/Envs/pandas-dev/lib/python3.6/site-packages/matplotlib/pyplot.py:984: UserWarning: Requested projection is different from current axis projection, creating new axis with requested projection.
    return gcf().gca(**kwargs)

pandas/tests/plotting/test_misc.py::TestDataFramePlots::()::test_andrews_curves
  /Users/taugspurger/Envs/pandas-dev/lib/python3.6/site-packages/matplotlib/pyplot.py:984: UserWarning: Requested projection is different from current axis projection, creating new axis with requested projection.
    return gcf().gca(**kwargs)
  /Users/taugspurger/Envs/pandas-dev/lib/python3.6/site-packages/matplotlib/pyplot.py:984: UserWarning: Requested projection is different from current axis projection, creating new axis with requested projection.
    return gcf().gca(**kwargs)
  /Users/taugspurger/Envs/pandas-dev/lib/python3.6/site-packages/matplotlib/pyplot.py:984: UserWarning: Requested projection is different from current axis projection, creating new axis with requested projection.
    return gcf().gca(**kwargs)
  /Users/taugspurger/Envs/pandas-dev/lib/python3.6/site-packages/matplotlib/pyplot.py:984: UserWarning: Requested projection is different from current axis projection, creating new axis with requested projection.
    return gcf().gca(**kwargs)
  /Users/taugspurger/Envs/pandas-dev/lib/python3.6/site-packages/matplotlib/pyplot.py:984: UserWarning: Requested projection is different from current axis projection, creating new axis with requested projection.
    return gcf().gca(**kwargs)
  /Users/taugspurger/Envs/pandas-dev/lib/python3.6/site-packages/matplotlib/pyplot.py:984: UserWarning: Requested projection is different from current axis projection, creating new axis with requested projection.
    return gcf().gca(**kwargs)
  /Users/taugspurger/Envs/pandas-dev/lib/python3.6/site-packages/matplotlib/pyplot.py:984: UserWarning: Requested projection is different from current axis projection, creating new axis with requested projection.
    return gcf().gca(**kwargs)
  /Users/taugspurger/Envs/pandas-dev/lib/python3.6/site-packages/matplotlib/pyplot.py:984: UserWarning: Requested projection is different from current axis projection, creating new axis with requested projection.
    return gcf().gca(**kwargs)

pandas/tests/plotting/test_misc.py::TestDataFramePlots::()::test_parallel_coordinates_with_sorted_labels
  /Users/taugspurger/Envs/pandas-dev/lib/python3.6/site-packages/matplotlib/axes/_base.py:3121: UserWarning: Attempting to set identical left==right results
  in singular transformations; automatically expanding.
  left=0, right=0
    'left=%s, right=%s') % (left, right))

pandas/tests/plotting/test_misc.py::TestDataFramePlots::()::test_radviz
  /Users/taugspurger/Envs/pandas-dev/lib/python3.6/site-packages/matplotlib/pyplot.py:984: UserWarning: Requested projection is different from current axis projection, creating new axis with requested projection.
    return gcf().gca(**kwargs)
  /Users/taugspurger/Envs/pandas-dev/lib/python3.6/site-packages/matplotlib/pyplot.py:984: UserWarning: Requested projection is different from current axis projection, creating new axis with requested projection.
    return gcf().gca(**kwargs)
  /Users/taugspurger/Envs/pandas-dev/lib/python3.6/site-packages/matplotlib/pyplot.py:984: UserWarning: Requested projection is different from current axis projection, creating new axis with requested projection.
    return gcf().gca(**kwargs)
  /Users/taugspurger/Envs/pandas-dev/lib/python3.6/site-packages/matplotlib/pyplot.py:984: UserWarning: Requested projection is different from current axis projection, creating new axis with requested projection.
    return gcf().gca(**kwargs)

pandas/tests/plotting/test_series.py::TestSeriesPlots::()::test_hist_legacy
  /Users/taugspurger/Envs/pandas-dev/lib/python3.6/site-packages/matplotlib/cbook/deprecation.py:107: MatplotlibDeprecationWarning: Adding an axes using the same arguments as a previous axes currently reuses the earlier instance.  In a future version, a new instance will always be created and returned.  Meanwhile, this warning can be suppressed, and the future behavior ensured, by passing a unique label to each axes instance.
    warnings.warn(message, mplDeprecation, stacklevel=1)
  /Users/taugspurger/Envs/pandas-dev/lib/python3.6/site-packages/matplotlib/cbook/deprecation.py:107: MatplotlibDeprecationWarning: Adding an axes using the same arguments as a previous axes currently reuses the earlier instance.  In a future version, a new instance will always be created and returned.  Meanwhile, this warning can be suppressed, and the future behavior ensured, by passing a unique label to each axes instance.
    warnings.warn(message, mplDeprecation, stacklevel=1)
  /Users/taugspurger/Envs/pandas-dev/lib/python3.6/site-packages/matplotlib/cbook/deprecation.py:107: MatplotlibDeprecationWarning: Adding an axes using the same arguments as a previous axes currently reuses the earlier instance.  In a future version, a new instance will always be created and returned.  Meanwhile, this warning can be suppressed, and the future behavior ensured, by passing a unique label to each axes instance.
    warnings.warn(message, mplDeprecation, stacklevel=1)
  /Users/taugspurger/Envs/pandas-dev/lib/python3.6/site-packages/matplotlib/cbook/deprecation.py:107: MatplotlibDeprecationWarning: Adding an axes using the same arguments as a previous axes currently reuses the earlier instance.  In a future version, a new instance will always be created and returned.  Meanwhile, this warning can be suppressed, and the future behavior ensured, by passing a unique label to each axes instance.
    warnings.warn(message, mplDeprecation, stacklevel=1)
  /Users/taugspurger/Envs/pandas-dev/lib/python3.6/site-packages/matplotlib/cbook/deprecation.py:107: MatplotlibDeprecationWarning: Adding an axes using the same arguments as a previous axes currently reuses the earlier instance.  In a future version, a new instance will always be created and returned.  Meanwhile, this warning can be suppressed, and the future behavior ensured, by passing a unique label to each axes instance.
    warnings.warn(message, mplDeprecation, stacklevel=1)
  /Users/taugspurger/Envs/pandas-dev/lib/python3.6/site-packages/matplotlib/cbook/deprecation.py:107: MatplotlibDeprecationWarning: Adding an axes using the same arguments as a previous axes currently reuses the earlier instance.  In a future version, a new instance will always be created and returned.  Meanwhile, this warning can be suppressed, and the future behavior ensured, by passing a unique label to each axes instance.
    warnings.warn(message, mplDeprecation, stacklevel=1)
```

</details>
 - TestTSPlot.test_format_timedelta_ticks_narrow and TestTSPlot.test_format_timedelta_ticks_narrow do not, I suspect that we are doing a better job of trimming un-shown ticks
 - TestDataFramePlots.test_plain_axes this one does and may be our fault (attn @jklymak )

>  I suspect that we are doing a better job of trimming un-shown ticks

I was looking into those this morning, and it looks like MPL is doing everything correctly now. It matches the behavior of un-shown ticks for regular integer ticks / tick labels.
https://github.com/matplotlib/matplotlib/pull/10594 covered the last colorbar issue and is in 2.2  Pandas uses `pyplot`?  
Closing in favor of https://github.com/pandas-dev/pandas/pull/20079