Skip to content

Commit b1c113f

Browse files
TomAugspurgerjreback
authored andcommitted
COMPAT: Matplotlib 2.2 compatability (#20079)
1 parent edaa112 commit b1c113f

File tree

3 files changed

+30
-75
lines changed

3 files changed

+30
-75
lines changed

pandas/plotting/_compat.py

+20-65
Original file line numberDiff line numberDiff line change
@@ -1,76 +1,31 @@
11
# being a bit too dynamic
22
# pylint: disable=E1101
33
from __future__ import division
4+
import operator
45

56
from distutils.version import LooseVersion
67

78

8-
def _mpl_le_1_2_1():
9-
try:
10-
import matplotlib as mpl
11-
return (LooseVersion(mpl.__version__) <= LooseVersion('1.2.1') and
9+
def _mpl_version(version, op):
10+
def inner():
11+
try:
12+
import matplotlib as mpl
13+
except ImportError:
14+
return False
15+
return (op(LooseVersion(mpl.__version__), LooseVersion(version)) and
1216
str(mpl.__version__)[0] != '0')
13-
except ImportError:
14-
return False
1517

18+
return inner
1619

17-
def _mpl_ge_1_3_1():
18-
try:
19-
import matplotlib
20-
# The or v[0] == '0' is because their versioneer is
21-
# messed up on dev
22-
return (LooseVersion(matplotlib.__version__) >=
23-
LooseVersion('1.3.1') or
24-
str(matplotlib.__version__)[0] == '0')
25-
except ImportError:
26-
return False
2720

28-
29-
def _mpl_ge_1_4_0():
30-
try:
31-
import matplotlib
32-
return (LooseVersion(matplotlib.__version__) >= LooseVersion('1.4') or
33-
str(matplotlib.__version__)[0] == '0')
34-
except ImportError:
35-
return False
36-
37-
38-
def _mpl_ge_1_5_0():
39-
try:
40-
import matplotlib
41-
return (LooseVersion(matplotlib.__version__) >= LooseVersion('1.5') or
42-
str(matplotlib.__version__)[0] == '0')
43-
except ImportError:
44-
return False
45-
46-
47-
def _mpl_ge_2_0_0():
48-
try:
49-
import matplotlib
50-
return LooseVersion(matplotlib.__version__) >= LooseVersion('2.0')
51-
except ImportError:
52-
return False
53-
54-
55-
def _mpl_le_2_0_0():
56-
try:
57-
import matplotlib
58-
return matplotlib.compare_versions('2.0.0', matplotlib.__version__)
59-
except ImportError:
60-
return False
61-
62-
63-
def _mpl_ge_2_0_1():
64-
try:
65-
import matplotlib
66-
return LooseVersion(matplotlib.__version__) >= LooseVersion('2.0.1')
67-
except ImportError:
68-
return False
69-
70-
71-
def _mpl_ge_2_1_0():
72-
try:
73-
import matplotlib
74-
return LooseVersion(matplotlib.__version__) >= LooseVersion('2.1')
75-
except ImportError:
76-
return False
21+
_mpl_ge_1_2_1 = _mpl_version('1.2.1', operator.ge)
22+
_mpl_le_1_2_1 = _mpl_version('1.2.1', operator.le)
23+
_mpl_ge_1_3_1 = _mpl_version('1.3.1', operator.ge)
24+
_mpl_ge_1_4_0 = _mpl_version('1.4.0', operator.ge)
25+
_mpl_ge_1_4_1 = _mpl_version('1.4.1', operator.ge)
26+
_mpl_ge_1_5_0 = _mpl_version('1.5.0', operator.ge)
27+
_mpl_ge_2_0_0 = _mpl_version('2.0.0', operator.ge)
28+
_mpl_le_2_0_0 = _mpl_version('2.0.0', operator.le)
29+
_mpl_ge_2_0_1 = _mpl_version('2.0.1', operator.ge)
30+
_mpl_ge_2_1_0 = _mpl_version('2.1.0', operator.ge)
31+
_mpl_ge_2_2_0 = _mpl_version('2.2.0', operator.ge)

pandas/tests/plotting/common.py

+1
Original file line numberDiff line numberDiff line change
@@ -56,6 +56,7 @@ def setup_method(self, method):
5656
self.mpl_ge_1_5_0 = plotting._compat._mpl_ge_1_5_0()
5757
self.mpl_ge_2_0_0 = plotting._compat._mpl_ge_2_0_0()
5858
self.mpl_ge_2_0_1 = plotting._compat._mpl_ge_2_0_1()
59+
self.mpl_ge_2_2_0 = plotting._compat._mpl_ge_2_2_0()
5960

6061
if self.mpl_ge_1_4_0:
6162
self.bp_n_objects = 7

pandas/tests/plotting/test_datetimelike.py

+9-10
Original file line numberDiff line numberDiff line change
@@ -8,7 +8,7 @@
88

99
import numpy as np
1010
from pandas import Index, Series, DataFrame, NaT
11-
from pandas.compat import is_platform_mac, PY3
11+
from pandas.compat import PY3
1212
from pandas.core.indexes.datetimes import date_range, bdate_range
1313
from pandas.core.indexes.timedeltas import timedelta_range
1414
from pandas.tseries.offsets import DateOffset
@@ -1357,13 +1357,13 @@ def test_plot_outofbounds_datetime(self):
13571357
values = [datetime(1677, 1, 1, 12), datetime(1677, 1, 2, 12)]
13581358
ax.plot(values)
13591359

1360-
@td.xfail_if_mpl_2_2
1361-
@pytest.mark.skip(
1362-
is_platform_mac(),
1363-
"skip on mac for precision display issue on older mpl")
13641360
def test_format_timedelta_ticks_narrow(self):
13651361

1366-
if self.mpl_ge_2_0_0:
1362+
if self.mpl_ge_2_2_0:
1363+
expected_labels = (['-1 days 23:59:59.999999998'] +
1364+
['00:00:00.0000000{:0>2d}'.format(2 * i)
1365+
for i in range(6)])
1366+
elif self.mpl_ge_2_0_0:
13671367
expected_labels = [''] + [
13681368
'00:00:00.00000000{:d}'.format(2 * i)
13691369
for i in range(5)] + ['']
@@ -1382,10 +1382,6 @@ def test_format_timedelta_ticks_narrow(self):
13821382
for l, l_expected in zip(labels, expected_labels):
13831383
assert l.get_text() == l_expected
13841384

1385-
@td.xfail_if_mpl_2_2
1386-
@pytest.mark.skip(
1387-
is_platform_mac(),
1388-
"skip on mac for precision display issue on older mpl")
13891385
def test_format_timedelta_ticks_wide(self):
13901386

13911387
if self.mpl_ge_2_0_0:
@@ -1402,6 +1398,9 @@ def test_format_timedelta_ticks_wide(self):
14021398
'9 days 06:13:20',
14031399
''
14041400
]
1401+
if self.mpl_ge_2_2_0:
1402+
expected_labels[0] = '-2 days 20:13:20'
1403+
expected_labels[-1] = '10 days 10:00:00'
14051404
else:
14061405
expected_labels = [
14071406
'00:00:00',

0 commit comments

Comments
 (0)