misplaced scatter/hexbin subplot colorbars
State: closed

- [x] closes #20455
- [x] tests added / passed
- [x] passes `git diff upstream/master -u -- "*.py" | flake8 --diff`
- [x] whatsnew entry

NOTE: I have tested the following in Jupyter lab.

When I run:

```python
%matplotlib inline
import matplotlib.pyplot as plt
import numpy as np
import pandas as pd
random_array = np.random.random((1000,3))
df = pd.DataFrame(random_array,columns=['A label','B label','C label'])

fig, axes = plt.subplots(1, 2)
df.plot.scatter('A label','B label', c='C label', ax=axes[0])
df.plot.scatter('A label','B label', c='C label', ax=axes[1])
plt.tight_layout()
```
I get:

![image](https://user-images.githubusercontent.com/26352146/42286164-eaa6ad96-7f7f-11e8-9bb5-cbe03d9820b7.png)

This PR fixes the issue with colorbars. After the PR the output is:

![image](https://user-images.githubusercontent.com/26352146/42286213-213375ba-7f80-11e8-964c-a0d4bdd79526.png)

This also fixes similar issue with hexbin plot. To explore different configurations try the following function:

```python
%matplotlib inline
import matplotlib.pyplot as plt
import numpy as np
import pandas as pd

def make_multiplots(numrows=2,numcols=2,sharey=True,sharex=True, is_scatter = True):
    fig, axes = plt.subplots(numrows, numcols, sharey=sharey, sharex=sharex )
    for i in range(axes.shape[0]):
        for j in range(axes.shape[1]):
            random_array = np.random.random((1000,3))
            df = pd.DataFrame(random_array,columns=['A label','B label','C label'])
            if is_scatter:
                df.plot.scatter('A label', 'B label', c='C label', ax=axes[i,j]);
            else:
                df.plot.hexbin('A label', 'B label', gridsize=20, ax=axes[i,j]);

make_multiplots(numrows=2,numcols=3,sharey=False, sharex=False, is_scatter=False)
plt.tight_layout()
```
![image](https://user-images.githubusercontent.com/26352146/42286309-6bbba0c6-7f80-11e8-9327-b17cf31ecb07.png)



Labels:
name: Visualization
description: plotting

Comments:
# [Codecov](https://codecov.io/gh/pandas-dev/pandas/pull/21728?src=pr&el=h1) Report
> Merging [#21728](https://codecov.io/gh/pandas-dev/pandas/pull/21728?src=pr&el=desc) into [master](https://codecov.io/gh/pandas-dev/pandas/commit/62a0ebc5837a4a1f7cc925e13344be1adf1acc59?src=pr&el=desc) will **increase** coverage by `<.01%`.
> The diff coverage is `100%`.

[![Impacted file tree graph](https://codecov.io/gh/pandas-dev/pandas/pull/21728/graphs/tree.svg?width=650&height=150&src=pr&token=eZ4WkYLtcO)](https://codecov.io/gh/pandas-dev/pandas/pull/21728?src=pr&el=tree)

```diff
@@            Coverage Diff             @@
##           master   #21728      +/-   ##
==========================================
+ Coverage   91.92%   91.93%   +<.01%     
==========================================
  Files         158      159       +1     
  Lines       49705    49719      +14     
==========================================
+ Hits        45693    45707      +14     
  Misses       4012     4012
```

| Flag | Coverage Δ | |
|---|---|---|
| #multiple | `90.3% <100%> (ø)` | :arrow_up: |
| #single | `42.02% <0%> (+0.02%)` | :arrow_up: |

| [Impacted Files](https://codecov.io/gh/pandas-dev/pandas/pull/21728?src=pr&el=tree) | Coverage Δ | |
|---|---|---|
| [pandas/plotting/\_core.py](https://codecov.io/gh/pandas-dev/pandas/pull/21728/diff?src=pr&el=tree#diff-cGFuZGFzL3Bsb3R0aW5nL19jb3JlLnB5) | `83.57% <100%> (ø)` | :arrow_up: |
| [pandas/core/arrays/period.py](https://codecov.io/gh/pandas-dev/pandas/pull/21728/diff?src=pr&el=tree#diff-cGFuZGFzL2NvcmUvYXJyYXlzL3BlcmlvZC5weQ==) | `86.53% <0%> (-13.47%)` | :arrow_down: |
| [pandas/core/arrays/datetimelike.py](https://codecov.io/gh/pandas-dev/pandas/pull/21728/diff?src=pr&el=tree#diff-cGFuZGFzL2NvcmUvYXJyYXlzL2RhdGV0aW1lbGlrZS5weQ==) | `94.38% <0%> (-0.14%)` | :arrow_down: |
| [pandas/core/indexes/timedeltas.py](https://codecov.io/gh/pandas-dev/pandas/pull/21728/diff?src=pr&el=tree#diff-cGFuZGFzL2NvcmUvaW5kZXhlcy90aW1lZGVsdGFzLnB5) | `91.05% <0%> (-0.04%)` | :arrow_down: |
| [pandas/core/indexes/datetimes.py](https://codecov.io/gh/pandas-dev/pandas/pull/21728/diff?src=pr&el=tree#diff-cGFuZGFzL2NvcmUvaW5kZXhlcy9kYXRldGltZXMucHk=) | `95.48% <0%> (-0.01%)` | :arrow_down: |
| [pandas/core/generic.py](https://codecov.io/gh/pandas-dev/pandas/pull/21728/diff?src=pr&el=tree#diff-cGFuZGFzL2NvcmUvZ2VuZXJpYy5weQ==) | `96.21% <0%> (-0.01%)` | :arrow_down: |
| [pandas/core/arrays/timedelta.py](https://codecov.io/gh/pandas-dev/pandas/pull/21728/diff?src=pr&el=tree#diff-cGFuZGFzL2NvcmUvYXJyYXlzL3RpbWVkZWx0YS5weQ==) | `100% <0%> (ø)` | :arrow_up: |
| [pandas/core/arrays/datetimes.py](https://codecov.io/gh/pandas-dev/pandas/pull/21728/diff?src=pr&el=tree#diff-cGFuZGFzL2NvcmUvYXJyYXlzL2RhdGV0aW1lcy5weQ==) | `100% <0%> (ø)` | :arrow_up: |
| [pandas/\_libs/tslibs/\_\_init\_\_.py](https://codecov.io/gh/pandas-dev/pandas/pull/21728/diff?src=pr&el=tree#diff-cGFuZGFzL19saWJzL3RzbGlicy9fX2luaXRfXy5weQ==) | `100% <0%> (ø)` | |
| [pandas/core/indexes/datetimelike.py](https://codecov.io/gh/pandas-dev/pandas/pull/21728/diff?src=pr&el=tree#diff-cGFuZGFzL2NvcmUvaW5kZXhlcy9kYXRldGltZWxpa2UucHk=) | `96.98% <0%> (+0.11%)` | :arrow_up: |
| ... and [1 more](https://codecov.io/gh/pandas-dev/pandas/pull/21728/diff?src=pr&el=tree-more) | |

------

[Continue to review full report at Codecov](https://codecov.io/gh/pandas-dev/pandas/pull/21728?src=pr&el=continue).
> **Legend** - [Click here to learn more](https://docs.codecov.io/docs/codecov-delta)
> `Δ = absolute <relative> (impact)`, `ø = not affected`, `? = missing data`
> Powered by [Codecov](https://codecov.io/gh/pandas-dev/pandas/pull/21728?src=pr&el=footer). Last update [62a0ebc...ad2b52a](https://codecov.io/gh/pandas-dev/pandas/pull/21728?src=pr&el=lastupdated). Read the [comment docs](https://docs.codecov.io/docs/pull-request-comments).

Thanks @jreback. I included a test that checks if the distance between subplot parent axes is almost the same as the distance between colorbars. 

I'm not sure what `@pytest.mark.slow` does. I assumed it's for skipping tests that are slow. Do I need it?
thanks @javadnoorb