From 830cf2501dc78a05980f8070e91b309e60a48be2 Mon Sep 17 00:00:00 2001 From: Chuanzhu Xu Date: Sat, 8 Jun 2019 21:09:01 -0400 Subject: [PATCH 1/8] move late import to top --- pandas/plotting/_matplotlib/boxplot.py | 9 +++------ 1 file changed, 3 insertions(+), 6 deletions(-) diff --git a/pandas/plotting/_matplotlib/boxplot.py b/pandas/plotting/_matplotlib/boxplot.py index c1a48ad5ca08b..33279dd3ec68d 100644 --- a/pandas/plotting/_matplotlib/boxplot.py +++ b/pandas/plotting/_matplotlib/boxplot.py @@ -2,10 +2,13 @@ import warnings from matplotlib import pyplot as plt +from matplotlib.artist import setp import numpy as np from pandas.core.dtypes.generic import ABCSeries from pandas.core.dtypes.missing import remove_na_arraylike +from pandas.core.reshape.concat import concat +from pandas.core.series import Series from pandas.io.formats.printing import pprint_thing from pandas.plotting._matplotlib.core import LinePlot, MPLPlot @@ -105,7 +108,6 @@ def maybe_color_bp(self, bp): medians = self.color or self._medians_c caps = self.color or self._caps_c - from matplotlib.artist import setp setp(bp['boxes'], color=boxes, alpha=1) setp(bp['whiskers'], color=whiskers, alpha=1) setp(bp['medians'], color=medians, alpha=1) @@ -113,7 +115,6 @@ def maybe_color_bp(self, bp): def _make_plot(self): if self.subplots: - from pandas.core.series import Series self._return_obj = Series() for i, (label, y) in enumerate(self._iter_data()): @@ -197,7 +198,6 @@ def _grouped_plot_by_column(plotf, data, columns=None, by=None, ax_values.append(re_plotf) ax.grid(grid) - from pandas.core.series import Series result = Series(ax_values, index=columns) # Return axes in multiplot case, maybe revisit later # 985 @@ -230,7 +230,6 @@ def _get_colors(): def maybe_color_bp(bp): if 'color' not in kwds: - from matplotlib.artist import setp setp(bp['boxes'], color=colors[0], alpha=1) setp(bp['whiskers'], color=colors[0], alpha=1) setp(bp['medians'], color=colors[2], alpha=1) @@ -314,7 +313,6 @@ def boxplot_frame_groupby(grouped, subplots=True, column=None, fontsize=None, figsize=figsize, layout=layout) axes = _flatten(axes) - from pandas.core.series import Series ret = Series() for (key, group), ax in zip(grouped, axes): d = group.boxplot(ax=ax, column=column, fontsize=fontsize, @@ -324,7 +322,6 @@ def boxplot_frame_groupby(grouped, subplots=True, column=None, fontsize=None, fig.subplots_adjust(bottom=0.15, top=0.9, left=0.1, right=0.9, wspace=0.2) else: - from pandas.core.reshape.concat import concat keys, frames = zip(*grouped) if grouped.axis == 0: df = concat(frames, keys=keys, axis=1) From e352331023c10631fab3da299f76bd3dd12d1ef6 Mon Sep 17 00:00:00 2001 From: Chuanzhu Xu Date: Sat, 8 Jun 2019 23:19:43 -0400 Subject: [PATCH 2/8] fix isort check and import concat from pandas --- pandas/plotting/_matplotlib/boxplot.py | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/pandas/plotting/_matplotlib/boxplot.py b/pandas/plotting/_matplotlib/boxplot.py index 33279dd3ec68d..09894973430eb 100644 --- a/pandas/plotting/_matplotlib/boxplot.py +++ b/pandas/plotting/_matplotlib/boxplot.py @@ -7,7 +7,8 @@ from pandas.core.dtypes.generic import ABCSeries from pandas.core.dtypes.missing import remove_na_arraylike -from pandas.core.reshape.concat import concat + +from pandas import concat from pandas.core.series import Series from pandas.io.formats.printing import pprint_thing From 256a536adc6398a8c642806baa4bd30d7b2c5a42 Mon Sep 17 00:00:00 2001 From: Chuanzhu Xu Date: Sun, 9 Jun 2019 08:36:58 -0400 Subject: [PATCH 3/8] update imports for boxplot --- pandas/plotting/_matplotlib/boxplot.py | 11 +++++------ 1 file changed, 5 insertions(+), 6 deletions(-) diff --git a/pandas/plotting/_matplotlib/boxplot.py b/pandas/plotting/_matplotlib/boxplot.py index 09894973430eb..b8a7da5270fc0 100644 --- a/pandas/plotting/_matplotlib/boxplot.py +++ b/pandas/plotting/_matplotlib/boxplot.py @@ -8,8 +8,7 @@ from pandas.core.dtypes.generic import ABCSeries from pandas.core.dtypes.missing import remove_na_arraylike -from pandas import concat -from pandas.core.series import Series +import pandas as pd from pandas.io.formats.printing import pprint_thing from pandas.plotting._matplotlib.core import LinePlot, MPLPlot @@ -116,7 +115,7 @@ def maybe_color_bp(self, bp): def _make_plot(self): if self.subplots: - self._return_obj = Series() + self._return_obj = pd.Series() for i, (label, y) in enumerate(self._iter_data()): ax = self._get_ax(i) @@ -199,7 +198,7 @@ def _grouped_plot_by_column(plotf, data, columns=None, by=None, ax_values.append(re_plotf) ax.grid(grid) - result = Series(ax_values, index=columns) + result = pd.Series(ax_values, index=columns) # Return axes in multiplot case, maybe revisit later # 985 if return_type is None: @@ -314,7 +313,7 @@ def boxplot_frame_groupby(grouped, subplots=True, column=None, fontsize=None, figsize=figsize, layout=layout) axes = _flatten(axes) - ret = Series() + ret = pd.Series() for (key, group), ax in zip(grouped, axes): d = group.boxplot(ax=ax, column=column, fontsize=fontsize, rot=rot, grid=grid, **kwds) @@ -325,7 +324,7 @@ def boxplot_frame_groupby(grouped, subplots=True, column=None, fontsize=None, else: keys, frames = zip(*grouped) if grouped.axis == 0: - df = concat(frames, keys=keys, axis=1) + df = pd.concat(frames, keys=keys, axis=1) else: if len(frames) > 1: df = frames[0].join(frames[1::]) From 2caafc828d05d25a545368a211140d41d936b508 Mon Sep 17 00:00:00 2001 From: Chuanzhu Xu Date: Sun, 9 Jun 2019 23:03:00 -0400 Subject: [PATCH 4/8] Move lazy imports to top for rest of _matplotlib --- pandas/plotting/_matplotlib/hist.py | 2 +- pandas/plotting/_matplotlib/misc.py | 11 ++++++----- pandas/plotting/_matplotlib/style.py | 7 ++++--- pandas/plotting/_matplotlib/timeseries.py | 2 +- pandas/plotting/_matplotlib/tools.py | 4 ++-- 5 files changed, 14 insertions(+), 12 deletions(-) diff --git a/pandas/plotting/_matplotlib/hist.py b/pandas/plotting/_matplotlib/hist.py index 585c407e33311..65f8d6dafbe59 100644 --- a/pandas/plotting/_matplotlib/hist.py +++ b/pandas/plotting/_matplotlib/hist.py @@ -2,6 +2,7 @@ import matplotlib.pyplot as plt import numpy as np +from scipy.stats import gaussian_kde from pandas.core.dtypes.common import is_integer, is_list_like from pandas.core.dtypes.generic import ABCDataFrame, ABCIndexClass @@ -125,7 +126,6 @@ def _get_ind(self, y): @classmethod def _plot(cls, ax, y, style=None, bw_method=None, ind=None, column_num=None, stacking_id=None, **kwds): - from scipy.stats import gaussian_kde y = remove_na_arraylike(y) gkde = gaussian_kde(y, bw_method=bw_method) diff --git a/pandas/plotting/_matplotlib/misc.py b/pandas/plotting/_matplotlib/misc.py index 7a04d48da434d..59a4c6bde256d 100644 --- a/pandas/plotting/_matplotlib/misc.py +++ b/pandas/plotting/_matplotlib/misc.py @@ -1,6 +1,12 @@ # being a bit too dynamic +from math import pi, sqrt +import random + +import matplotlib.lines as mlines +import matplotlib.patches as patches import matplotlib.pyplot as plt import numpy as np +from scipy.stats import gaussian_kde from pandas.core.dtypes.missing import notna @@ -50,7 +56,6 @@ def scatter_matrix(frame, alpha=0.5, figsize=None, ax=None, grid=False, ax.hist(values, **hist_kwds) elif diagonal in ('kde', 'density'): - from scipy.stats import gaussian_kde y = values gkde = gaussian_kde(y) ind = np.linspace(y.min(), y.max(), 1000) @@ -96,14 +101,12 @@ def scatter_matrix(frame, alpha=0.5, figsize=None, ax=None, grid=False, def _get_marker_compat(marker): - import matplotlib.lines as mlines if marker not in mlines.lineMarkers: return 'o' return marker def radviz(frame, class_column, ax=None, color=None, colormap=None, **kwds): - import matplotlib.patches as patches def normalize(series): a = min(series) @@ -168,7 +171,6 @@ def normalize(series): def andrews_curves(frame, class_column, ax=None, samples=200, color=None, colormap=None, **kwds): - from math import sqrt, pi def function(amplitudes): def f(t): @@ -223,7 +225,6 @@ def f(t): def bootstrap_plot(series, fig=None, size=50, samples=500, **kwds): - import random # random.sample(ndarray, int) fails on python 3.3, sigh data = list(series.values) diff --git a/pandas/plotting/_matplotlib/style.py b/pandas/plotting/_matplotlib/style.py index ef7bbd2f05703..80a15942a2867 100644 --- a/pandas/plotting/_matplotlib/style.py +++ b/pandas/plotting/_matplotlib/style.py @@ -1,17 +1,20 @@ # being a bit too dynamic import warnings +import matplotlib.cm as cm +import matplotlib.colors import matplotlib.pyplot as plt import numpy as np from pandas.core.dtypes.common import is_list_like +import pandas.core.common as com + def _get_standard_colors(num_colors=None, colormap=None, color_type='default', color=None): if color is None and colormap is not None: if isinstance(colormap, str): - import matplotlib.cm as cm cmap = colormap colormap = cm.get_cmap(colormap) if colormap is None: @@ -37,7 +40,6 @@ def _get_standard_colors(num_colors=None, colormap=None, color_type='default', colors = colors[0:num_colors] elif color_type == 'random': - import pandas.core.common as com def random_color(column): """ Returns a random color represented as a list of length 3""" @@ -50,7 +52,6 @@ def random_color(column): raise ValueError("color_type must be either 'default' or 'random'") if isinstance(colors, str): - import matplotlib.colors conv = matplotlib.colors.ColorConverter() def _maybe_valid_colors(colors): diff --git a/pandas/plotting/_matplotlib/timeseries.py b/pandas/plotting/_matplotlib/timeseries.py index 37e025b594ef2..30038b599a386 100644 --- a/pandas/plotting/_matplotlib/timeseries.py +++ b/pandas/plotting/_matplotlib/timeseries.py @@ -1,6 +1,7 @@ # TODO: Use the fact that axis can have units to simplify the process import functools +import warnings from matplotlib import pylab import matplotlib.pyplot as plt @@ -25,7 +26,6 @@ def tsplot(series, plotf, ax=None, **kwargs): - import warnings """ Plots a Series on the given Matplotlib axes or the current axes diff --git a/pandas/plotting/_matplotlib/tools.py b/pandas/plotting/_matplotlib/tools.py index e0caab6211ce3..f6393fc76892f 100644 --- a/pandas/plotting/_matplotlib/tools.py +++ b/pandas/plotting/_matplotlib/tools.py @@ -3,6 +3,8 @@ import warnings import matplotlib.pyplot as plt +import matplotlib.table +import matplotlib.ticker as ticker import numpy as np from pandas.core.dtypes.common import is_list_like @@ -37,7 +39,6 @@ def table(ax, data, rowLabels=None, colLabels=None, **kwargs): cellText = data.values - import matplotlib.table table = matplotlib.table.table(ax, cellText=cellText, rowLabels=rowLabels, colLabels=colLabels, **kwargs) @@ -260,7 +261,6 @@ def _remove_labels_from_axis(axis): try: # set_visible will not be effective if # minor axis has NullLocator and NullFormattor (default) - import matplotlib.ticker as ticker if isinstance(axis.get_minor_locator(), ticker.NullLocator): axis.set_minor_locator(ticker.AutoLocator()) if isinstance(axis.get_minor_formatter(), ticker.NullFormatter): From a0a1d2a00da400cb7e357c664af93234258a4c8c Mon Sep 17 00:00:00 2001 From: Chuanzhu Xu Date: Mon, 10 Jun 2019 19:20:07 -0400 Subject: [PATCH 5/8] restore scipy import back to function don't have to load scipy unless user call kdeplot --- pandas/plotting/_matplotlib/hist.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/pandas/plotting/_matplotlib/hist.py b/pandas/plotting/_matplotlib/hist.py index 65f8d6dafbe59..585c407e33311 100644 --- a/pandas/plotting/_matplotlib/hist.py +++ b/pandas/plotting/_matplotlib/hist.py @@ -2,7 +2,6 @@ import matplotlib.pyplot as plt import numpy as np -from scipy.stats import gaussian_kde from pandas.core.dtypes.common import is_integer, is_list_like from pandas.core.dtypes.generic import ABCDataFrame, ABCIndexClass @@ -126,6 +125,7 @@ def _get_ind(self, y): @classmethod def _plot(cls, ax, y, style=None, bw_method=None, ind=None, column_num=None, stacking_id=None, **kwds): + from scipy.stats import gaussian_kde y = remove_na_arraylike(y) gkde = gaussian_kde(y, bw_method=bw_method) From fcdc2d5d15785832afd880795793868ace9c64a2 Mon Sep 17 00:00:00 2001 From: Chuanzhu Xu Date: Mon, 10 Jun 2019 20:33:25 -0400 Subject: [PATCH 6/8] remove outdated comment --- pandas/plotting/_matplotlib/misc.py | 1 - 1 file changed, 1 deletion(-) diff --git a/pandas/plotting/_matplotlib/misc.py b/pandas/plotting/_matplotlib/misc.py index 59a4c6bde256d..7262a6064bb11 100644 --- a/pandas/plotting/_matplotlib/misc.py +++ b/pandas/plotting/_matplotlib/misc.py @@ -1,4 +1,3 @@ -# being a bit too dynamic from math import pi, sqrt import random From c3863d599efe9062996228d8e9b696759286309a Mon Sep 17 00:00:00 2001 From: Chuanzhu Xu Date: Mon, 10 Jun 2019 21:01:31 -0400 Subject: [PATCH 7/8] switch pi sqrt import from math to numpy --- pandas/plotting/_matplotlib/misc.py | 7 +++---- 1 file changed, 3 insertions(+), 4 deletions(-) diff --git a/pandas/plotting/_matplotlib/misc.py b/pandas/plotting/_matplotlib/misc.py index 7262a6064bb11..08e37f5be056a 100644 --- a/pandas/plotting/_matplotlib/misc.py +++ b/pandas/plotting/_matplotlib/misc.py @@ -1,4 +1,3 @@ -from math import pi, sqrt import random import matplotlib.lines as mlines @@ -174,7 +173,7 @@ def andrews_curves(frame, class_column, ax=None, samples=200, color=None, def function(amplitudes): def f(t): x1 = amplitudes[0] - result = x1 / sqrt(2.0) + result = x1 / np.sqrt(2.0) # Take the rest of the coefficients and resize them # appropriately. Take a copy of amplitudes as otherwise numpy @@ -197,7 +196,7 @@ def f(t): class_col = frame[class_column] classes = frame[class_column].drop_duplicates() df = frame.drop(class_column, axis=1) - t = np.linspace(-pi, pi, samples) + t = np.linspace(-np.pi, np.pi, samples) used_legends = set() color_values = _get_standard_colors(num_colors=len(classes), @@ -205,7 +204,7 @@ def f(t): color=color) colors = dict(zip(classes, color_values)) if ax is None: - ax = plt.gca(xlim=(-pi, pi)) + ax = plt.gca(xlim=(-np.pi, np.pi)) for i in range(n): row = df.iloc[i].values f = function(row) From d95a9bf4d00409ec4a0a86d6776d3c13536ad607 Mon Sep 17 00:00:00 2001 From: Chuanzhu Xu Date: Mon, 10 Jun 2019 21:06:58 -0400 Subject: [PATCH 8/8] restore scipy import back as lazy import only import scipy when it is kde and density --- pandas/plotting/_matplotlib/misc.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/pandas/plotting/_matplotlib/misc.py b/pandas/plotting/_matplotlib/misc.py index 08e37f5be056a..dacc9ef04f819 100644 --- a/pandas/plotting/_matplotlib/misc.py +++ b/pandas/plotting/_matplotlib/misc.py @@ -4,7 +4,6 @@ import matplotlib.patches as patches import matplotlib.pyplot as plt import numpy as np -from scipy.stats import gaussian_kde from pandas.core.dtypes.missing import notna @@ -54,6 +53,7 @@ def scatter_matrix(frame, alpha=0.5, figsize=None, ax=None, grid=False, ax.hist(values, **hist_kwds) elif diagonal in ('kde', 'density'): + from scipy.stats import gaussian_kde y = values gkde = gaussian_kde(y) ind = np.linspace(y.min(), y.max(), 1000)