def _moran_loc_scatterplot(moran_loc, zstandard=True, p=None, aspect_equal=True, ax=None, scatter_kwds=None, fitline_kwds=None): """ Moran Scatterplot with option of coloring of Local Moran Statistics Parameters ---------- moran_loc : esda.moran.Moran_Local instance Values of Moran's I Local Autocorrelation Statistics p : float, optional If given, the p-value threshold for significance. Points will be colored by significance. By default it will not be colored. Default =None. aspect_equal : bool, optional If True, Axes of Moran Scatterplot will show the same aspect or visual proportions. ax : Matplotlib Axes instance, optional If given, the Moran plot will be created inside this axis. Default =None. scatter_kwds : keyword arguments, optional Keywords used for creating and designing the scatter points. Default =None. fitline_kwds : keyword arguments, optional Keywords used for creating and designing the moran fitline. Default =None. Returns ------- fig : Matplotlib Figure instance Moran Local scatterplot figure ax : matplotlib Axes instance Axes in which the figure is plotted Examples -------- Imports >>> import matplotlib.pyplot as plt >>> import geopandas as gpd >>> from libpysal.weights.contiguity import Queen >>> from libpysal import examples >>> from esda.moran import Moran_Local >>> from splot.esda import moran_scatterplot Load data and calculate Moran Local statistics >>> link = examples.get_path('Guerry.shp') >>> gdf = gpd.read_file(link) >>> y = gdf['Donatns'].values >>> w = Queen.from_dataframe(gdf) >>> w.transform = 'r' >>> m = Moran_Local(y, w) plot >>> moran_scatterplot(m) >>> plt.show() customize plot >>> moran_scatterplot(m, p=0.05, ... fitline_kwds=dict(color='#4393c3')) >>> plt.show() """ # to set default as an empty dictionary that is later filled with defaults if scatter_kwds is None: scatter_kwds = dict() if fitline_kwds is None: fitline_kwds = dict() if p is not None: if not isinstance(moran_loc, Moran_Local): raise ValueError("`moran_loc` is not a\n " + "esda.moran.Moran_Local instance") if 'color' in scatter_kwds or 'c' in scatter_kwds or 'cmap' in scatter_kwds: warnings.warn('To change the color use cmap with a colormap of 5,\n' + ' color defines the LISA category') # colors spots = moran_hot_cold_spots(moran_loc, p) hmap = colors.ListedColormap(['#bababa', '#d7191c', '#abd9e9', '#2c7bb6', '#fdae61']) # define customization scatter_kwds.setdefault('alpha', 0.6) scatter_kwds.setdefault('s', 40) fitline_kwds.setdefault('alpha', 0.9) # get fig and ax fig, ax = _create_moran_fig_ax(ax, figsize=(7,7), aspect_equal=aspect_equal) # set labels ax.set_xlabel('Attribute') ax.set_ylabel('Spatial Lag') ax.set_title('Moran Local Scatterplot') # plot and set standards if zstandard is True: lag = lag_spatial(moran_loc.w, moran_loc.z) fit = OLS(moran_loc.z[:, None], lag[:, None]) # v- and hlines ax.axvline(0, alpha=0.5, color='k', linestyle='--') ax.axhline(0, alpha=0.5, color='k', linestyle='--') if p is not None: fitline_kwds.setdefault('color', 'k') scatter_kwds.setdefault('cmap', hmap) scatter_kwds.setdefault('c', spots) ax.plot(lag, fit.predy, **fitline_kwds) ax.scatter(moran_loc.z, fit.predy, **scatter_kwds) else: scatter_kwds.setdefault('color', splot_colors['moran_base']) fitline_kwds.setdefault('color', splot_colors['moran_fit']) ax.plot(lag, fit.predy, **fitline_kwds) ax.scatter(moran_loc.z, fit.predy, **scatter_kwds) else: lag = lag_spatial(moran_loc.w, moran_loc.y) b, a = np.polyfit(moran_loc.y, lag, 1) # dashed vert at mean of the attribute ax.vlines(moran_loc.y.mean(), lag.min(), lag.max(), alpha=0.5, linestyle='--') # dashed horizontal at mean of lagged attribute ax.hlines(lag.mean(), moran_loc.y.min(), moran_loc.y.max(), alpha=0.5, linestyle='--') if p is not None: fitline_kwds.setdefault('color', 'k') scatter_kwds.setdefault('cmap', hmap) scatter_kwds.setdefault('c', spots) ax.plot(moran_loc.y, a + b*moran_loc.y, **fitline_kwds) ax.scatter(moran_loc.y, lag, **scatter_kwds) else: scatter_kwds.setdefault('c', splot_colors['moran_base']) fitline_kwds.setdefault('color', splot_colors['moran_fit']) ax.plot(moran_loc.y, a + b*moran_loc.y, **fitline_kwds) ax.scatter(moran_loc.y, lag, **scatter_kwds) return fig, ax
def _moran_global_scatterplot(moran, zstandard=True, aspect_equal=True, ax=None, scatter_kwds=None, fitline_kwds=None): """ Global Moran's I Scatterplot. Parameters ---------- moran : esda.moran.Moran instance Values of Moran's I Global Autocorrelation Statistics zstandard : bool, optional If True, Moran Scatterplot will show z-standardized attribute and spatial lag values. Default =True. aspect_equal : bool, optional If True, Axes will show the same aspect or visual proportions. ax : Matplotlib Axes instance, optional If given, the Moran plot will be created inside this axis. Default =None. scatter_kwds : keyword arguments, optional Keywords used for creating and designing the scatter points. Default =None. fitline_kwds : keyword arguments, optional Keywords used for creating and designing the moran fitline. Default =None. Returns ------- fig : Matplotlib Figure instance Moran scatterplot figure ax : matplotlib Axes instance Axes in which the figure is plotted Examples -------- Imports >>> import matplotlib.pyplot as plt >>> from libpysal.weights.contiguity import Queen >>> from libpysal import examples >>> import geopandas as gpd >>> from esda.moran import Moran >>> from splot.esda import moran_scatterplot Load data and calculate weights >>> link_to_data = examples.get_path('Guerry.shp') >>> gdf = gpd.read_file(link_to_data) >>> y = gdf['Donatns'].values >>> w = Queen.from_dataframe(gdf) >>> w.transform = 'r' Calculate Global Moran >>> moran = Moran(y, w) plot >>> moran_scatterplot(moran) >>> plt.show() customize plot >>> fig, ax = moran_scatterplot(moran, zstandard=False, ... fitline_kwds=dict(color='#4393c3')) >>> ax.set_xlabel('Donations') >>> plt.show() """ # to set default as an empty dictionary that is later filled with defaults if scatter_kwds is None: scatter_kwds = dict() if fitline_kwds is None: fitline_kwds = dict() # define customization defaults scatter_kwds.setdefault('alpha', 0.6) scatter_kwds.setdefault('color', splot_colors['moran_base']) scatter_kwds.setdefault('s', 40) fitline_kwds.setdefault('alpha', 0.9) fitline_kwds.setdefault('color', splot_colors['moran_fit']) # get fig and ax fig, ax = _create_moran_fig_ax(ax, figsize=(7, 7), aspect_equal=aspect_equal) # set labels ax.set_xlabel('Attribute') ax.set_ylabel('Spatial Lag') ax.set_title('Moran Scatterplot' + ' (' + str(round(moran.I, 2)) + ')') # plot and set standards if zstandard is True: lag = lag_spatial(moran.w, moran.z) fit = OLS(moran.z[:, None], lag[:, None]) # plot ax.scatter(moran.z, lag, **scatter_kwds) ax.plot(lag, fit.predy, **fitline_kwds) # v- and hlines ax.axvline(0, alpha=0.5, color='k', linestyle='--') ax.axhline(0, alpha=0.5, color='k', linestyle='--') else: lag = lag_spatial(moran.w, moran.y) b, a = np.polyfit(moran.y, lag, 1) # plot ax.scatter(moran.y, lag, **scatter_kwds) ax.plot(moran.y, a + b*moran.y, **fitline_kwds) # dashed vert at mean of the attribute ax.vlines(moran.y.mean(), lag.min(), lag.max(), alpha=0.5, linestyle='--') # dashed horizontal at mean of lagged attribute ax.hlines(lag.mean(), moran.y.min(), moran.y.max(), alpha=0.5, linestyle='--') return fig, ax
def _moran_bv_scatterplot(moran_bv, ax=None, aspect_equal=True, scatter_kwds=None, fitline_kwds=None): """ Bivariate Moran Scatterplot. Parameters ---------- moran_bv : esda.moran.Moran_BV instance Values of Bivariate Moran's I Autocorrelation Statistics ax : Matplotlib Axes instance, optional If given, the Moran plot will be created inside this axis. Default =None. aspect_equal : bool, optional If True, Axes of Moran Scatterplot will show the same aspect or visual proportions. scatter_kwds : keyword arguments, optional Keywords used for creating and designing the scatter points. Default =None. fitline_kwds : keyword arguments, optional Keywords used for creating and designing the moran fitline. Default =None. Returns ------- fig : Matplotlib Figure instance Bivariate moran scatterplot figure ax : matplotlib Axes instance Axes in which the figure is plotted Examples -------- Imports >>> import matplotlib.pyplot as plt >>> from libpysal.weights.contiguity import Queen >>> from libpysal import examples >>> import geopandas as gpd >>> from esda.moran import Moran_BV >>> from splot.esda import moran_scatterplot Load data and calculate weights >>> link_to_data = examples.get_path('Guerry.shp') >>> gdf = gpd.read_file(link_to_data) >>> x = gdf['Suicids'].values >>> y = gdf['Donatns'].values >>> w = Queen.from_dataframe(gdf) >>> w.transform = 'r' Calculate Bivariate Moran >>> moran_bv = Moran_BV(x, y, w) plot >>> moran_scatterplot(moran_bv) >>> plt.show() customize plot >>> moran_scatterplot(moran_bv, ... fitline_kwds=dict(color='#4393c3')) >>> plt.show() """ # to set default as an empty dictionary that is later filled with defaults if scatter_kwds is None: scatter_kwds = dict() if fitline_kwds is None: fitline_kwds = dict() # define customization scatter_kwds.setdefault('alpha', 0.6) scatter_kwds.setdefault('color', splot_colors['moran_base']) scatter_kwds.setdefault('s', 40) fitline_kwds.setdefault('alpha', 0.9) fitline_kwds.setdefault('color', splot_colors['moran_fit']) # get fig and ax fig, ax = _create_moran_fig_ax(ax, figsize=(7,7), aspect_equal=aspect_equal) # set labels ax.set_xlabel('Attribute X') ax.set_ylabel('Spatial Lag of Y') ax.set_title('Bivariate Moran Scatterplot' + ' (' + str(round(moran_bv.I, 2)) + ')') # plot and set standards lag = lag_spatial(moran_bv.w, moran_bv.zy) fit = OLS(moran_bv.zy[:, None], lag[:, None]) # plot ax.scatter(moran_bv.zx, lag, **scatter_kwds) ax.plot(lag, fit.predy, **fitline_kwds) # v- and hlines ax.axvline(0, alpha=0.5, color='k', linestyle='--') ax.axhline(0, alpha=0.5, color='k', linestyle='--') return fig, ax
def moran_loc_bv_scatterplot(moran_loc_bv, p=None, ax=None, scatter_kwds=None, fitline_kwds=None): """ Moran Bivariate Scatterplot with option of coloring of Local Moran Statistics Parameters ---------- moran_loc : esda.moran.Moran_Local_BV instance Values of Moran's I Local Autocorrelation Statistics p : float, optional If given, the p-value threshold for significance. Points will be colored by significance. By default it will not be colored. Default =None. ax : Matplotlib Axes instance, optional If given, the Moran plot will be created inside this axis. Default =None. scatter_kwds : keyword arguments, optional Keywords used for creating and designing the scatter points. Default =None. fitline_kwds : keyword arguments, optional Keywords used for creating and designing the moran fitline. Default =None. Returns ------- fig : Matplotlib Figure instance Bivariate Moran Local scatterplot figure ax : matplotlib Axes instance Axes in which the figure is plotted Examples -------- Imports >>> import matplotlib.pyplot as plt >>> import geopandas as gpd >>> import libpysal.api as lp >>> from libpysal import examples >>> from esda.moran import Moran_Local_BV >>> from splot.esda import moran_loc_bv_scatterplot Load data and calculate Moran Local statistics >>> link = examples.get_path('Guerry.shp') >>> gdf = gpd.read_file(link) >>> x = gdf['Suicids'].values >>> y = gdf['Donatns'].values >>> w = lp.Queen.from_dataframe(gdf) >>> w.transform = 'r' >>> m = Moran_Local_BV(x, y, w) Plot >>> moran_loc_bv_scatterplot(m) Customize plot >>> moran_loc_bv_scatterplot(m, p=0.05, ... fitline_kwds=dict(color='#4393c3'))) >>> plt.show() """ # to set default as an empty dictionary that is later filled with defaults if scatter_kwds is None: scatter_kwds = dict() if fitline_kwds is None: fitline_kwds = dict() if p is not None: if not isinstance(moran_loc_bv, Moran_Local_BV): raise ValueError("`moran_loc_bv` is not a\n" + "esda.moran.Moran_Local_BV instance") if 'color' in scatter_kwds or 'cmap' in scatter_kwds: warnings.warn("To change the color use cmap with a colormap of 5,\n" + "c defines the LISA category, color will interfere with c") # colors spots_bv = moran_hot_cold_spots(moran_loc_bv, p) hmap = colors.ListedColormap(['#bababa', '#d7191c', '#abd9e9', '#2c7bb6', '#fdae61']) # define customization scatter_kwds.setdefault('alpha', 0.6) scatter_kwds.setdefault('s', 40) fitline_kwds.setdefault('alpha', 0.9) # get fig and ax fig, ax = _create_moran_fig_ax(ax, figsize=(7,7)) # set labels ax.set_xlabel('Attribute') ax.set_ylabel('Spatial Lag') ax.set_title('Moran BV Local Scatterplot') # plot and set standards lag = lp.lag_spatial(moran_loc_bv.w, moran_loc_bv.zy) fit = OLS(moran_loc_bv.zy[:, None], lag[:, None]) # v- and hlines ax.axvline(0, alpha=0.5, color='k', linestyle='--') ax.axhline(0, alpha=0.5, color='k', linestyle='--') if p is not None: fitline_kwds.setdefault('color', 'k') scatter_kwds.setdefault('cmap', hmap) scatter_kwds.setdefault('c', spots_bv) ax.plot(lag, fit.predy, **fitline_kwds) ax.scatter(moran_loc_bv.zx, fit.predy, **scatter_kwds) else: scatter_kwds.setdefault('color', splot_colors['moran_base']) fitline_kwds.setdefault('color', splot_colors['moran_fit']) ax.plot(lag, fit.predy, **fitline_kwds) ax.scatter(moran_loc_bv.zy, fit.predy, **scatter_kwds) return fig, ax