Source code for discrimintools.plot.fviz_dica

# -*- coding: utf-8 -*-
from pandas import concat
from plotnine import ggplot, aes, geom_point, geom_text, scale_color_manual

#interns functions
from .utils import check_is_valid_axis, check_is_valid_geom
from .fviz import add_scatter, set_axis, list_colors
from .fviz_dist import fviz_dist

[docs] def fviz_dica_ind( obj, axis = [0,1], geom_ind = ("point","text"), repel = False, point_args_ind = dict(shape = "o", size = 1.5), text_args_ind = dict(size = 8), add_group = True, geom_group = ("point","text"), point_args_group = dict(shape = "^", size = 3), text_args_group = dict(size = 11.5), palette = None, x_lim = None, y_lim = None, x_label = None, y_label = None, title = None, add_hline = True, add_vline = True, add_grid = True, ggtheme = None ): """ Visualize Discriminant Correspondence Analysis (DiCA) - Graph of individuals Discriminant correspondence analysis (DiCA) is a canonical discriminant analysis on qualitative predictors. :class:`~discrimintools.fviz_dica_ind` provides plotnine based elegant visualization of DiCA outputs for individuals. Parameters ---------- obj : class An instance of class :class:`~discrimintools.DiCA` axis : list, defaul = [0,1] Dimensions to be plotted geom_ind : str, list or tuple, default = ('point','text') Geometry to be used for the graph. Possible values are the combinaison of ["point","text"]. - 'point' to show only points, - 'text' to show only labels, - ('point','text') to show both types. repel : bool, default=False To avoid overplotting text labels. point_args_ind : dict, default = dict(shape = "o", size = 1.5) Keywords arguments for `geom_point <https://plotnine.org/reference/geom_point.html>`_. text_args_ind : dict, default = dict(size = 8) Keywords arguments for `geom_text <https://plotnine.org/reference/geom_text.html>`_. add_group : bool, default = True To show group coordinates. geom_group : str, list or tuple, default = ('point','text') See ``geom_ind``. point_args_group : dict, default = dict(shape = "^", size = 3) See ``point_args_ind``. text_args_group : dict, default = dict(size = 11.5) See ``text_args_ind``. palette : None or list, default = None Color palette to be used for coloring by groups. x_lim : None, list or tuple, default = None The range of the plotted ``x`` values. y_lim : None, list or tuple, default = None The range of the plotted ``y`` values. x_label : None or str, default = None The label text of ``x``. y_label : None or str, default = None The label text of ``y``. title : None or str, default = None The title of the graph you draw. add_hline : bool, default = True To add a horizontal line. add_vline : bool, default = True To add a vertical line. add_grid : bool, default = True To add grid customization. ggtheme : function, default = None Plotnine `theme <https://plotnine.org/guide/themes-premade.html>`_ name. Returns ------- p : class A object of class ggplot. See also -------- :class:`~discrimintools.fviz_dica` Visualize Discriminant Correspondence Analysis (DiCA). :class:`~discrimintools.fviz_dica_biplot` Visualize Discriminant Correspondence Analysis (DiCA) - Biplot of individuals and variables. :class:`~discrimintools.fviz_dica_quali_var` Visualize Discriminant Correspondence Analysis (DiCA) - Graph of qualitative variables. :class:`~discrimintools.fviz_dica_var` Visualize Discriminant Correspondence Analysis (DiCA) - graph of variables/categories. :class:`~discrimintools.fviz_dist` Visualize distance between barycenter. Examples -------- >>> from discrimintools.datasets import load_divay >>> from discrimintools import DiCA, fviz_dica_ind >>> D = load_divay() # load training data >>> y, X = D["Region"], D.drop(columns=["Region"]) # split into X and y >>> clf = DiCA() >>> clf.fit(X,y) DiCA() >>> p = fviz_dica_ind(clf) # graph of individuals >>> print(p) .. figure:: ../../../_static/fviz_dica_ind.png Graph if individuals - DiCA """ #--------------------------------------------------------------------------------------------------------------------------------------------------------------------- #check if obj is an instance of class DiCA #--------------------------------------------------------------------------------------------------------------------------------------------------------------------- if obj.model_ != "dica": raise TypeError("'obj' must be an instance of class DiCA") #--------------------------------------------------------------------------------------------------------------------------------------------------------------------- #check if valid iaxis #--------------------------------------------------------------------------------------------------------------------------------------------------------------------- check_is_valid_axis(obj,axis) #--------------------------------------------------------------------------------------------------------------------------------------------------------------------- #check if valid geom #--------------------------------------------------------------------------------------------------------------------------------------------------------------------- check_is_valid_geom(geom_ind,('point','text')) #--------------------------------------------------------------------------------------------------------------------------------------------------------------------- #set text arguments - add overlap arguments #--------------------------------------------------------------------------------------------------------------------------------------------------------------------- if repel and "text" in geom_ind: text_args_ind = dict(**text_args_ind,adjust_text=dict(arrowprops=dict(arrowstyle='-',lw=1.0))) #--------------------------------------------------------------------------------------------------------------------------------------------------------------------- #set index and palette #--------------------------------------------------------------------------------------------------------------------------------------------------------------------- #set index index = obj.call_.classes #set palette if palette is None: palette = list_colors[:len(index)] elif not isinstance(palette,(list,tuple)): raise TypeError("'palette' must be a list or a tuple of colors") elif len(palette) != len(index): raise TypeError(f"'palette' must be a list or tuple with length {len(index)}.") #create coordinate coord = concat((obj.ind_.coord,obj.call_.y),axis=1) #initialize p = ggplot(data=coord,mapping=aes(x = f"Can{axis[0]+1}",y=f"Can{axis[1]+1}",label=coord.index)) #--------------------------------------------------------------------------------------------------------------------------------------------------------------------- #add individuals coordinates #--------------------------------------------------------------------------------------------------------------------------------------------------------------------- if "point" in geom_ind: p = p + geom_point(aes(color=obj.call_.target),**point_args_ind) if "text" in geom_ind: p = p + geom_text(aes(color=obj.call_.target),**text_args_ind) #--------------------------------------------------------------------------------------------------------------------------------------------------------------------- #add classes coordinates #--------------------------------------------------------------------------------------------------------------------------------------------------------------------- if add_group: #check if valid geom check_is_valid_geom(geom_group,('point','text')) #set text arguments - add overlap arguments if repel and "text" in geom_group: text_args_group = dict(**text_args_group,adjust_text=dict(arrowprops=dict(arrowstyle='-',lw=1.0))) #classes coordinates class_coord = obj.classes_.coord class_coord[f"{obj.call_.target}"] = list(class_coord.index) #add points if "point" in geom_group: p = p + geom_point(data=class_coord,mapping=aes(x = f"Can{axis[0]+1}",y=f"Can{axis[1]+1}",color=obj.call_.target,label=class_coord.index),**point_args_group) #add texts if "text" in geom_group: p = p + geom_text(data=class_coord,mapping=aes(x = f"Can{axis[0]+1}",y=f"Can{axis[1]+1}",color=obj.call_.target,label=class_coord.index),**text_args_group) #--------------------------------------------------------------------------------------------------------------------------------------------------------------------- #add color scale #--------------------------------------------------------------------------------------------------------------------------------------------------------------------- p = p + scale_color_manual(values=palette,labels=index) #--------------------------------------------------------------------------------------------------------------------------------------------------------------------- #add others elements #--------------------------------------------------------------------------------------------------------------------------------------------------------------------- #set x label if x_label is None: x_label = "Can{} ({}%)".format(axis[0]+1,round(obj.eig_.iloc[axis[0],2],1)) #set y label if y_label is None: y_label = "Can{} ({}%)".format(axis[1]+1,round(obj.eig_.iloc[axis[1],2],1)) #set title if title is None: title = "Graph of individuals - {}".format(obj.__class__.__name__) p = set_axis(p=p,x_lim=x_lim,y_lim=y_lim,x_label=x_label,y_label=y_label,title=title,add_hline=add_hline,add_vline=add_vline,add_grid=add_grid,ggtheme=ggtheme) return p
[docs] def fviz_dica_var( obj, axis = [0,1], geom_var = ("point","text"), repel = False, col_var = "blue", point_args_var = dict(shape = "o", size = 1.5), text_args_var = dict(size = 8), add_group = True, geom_group = ("point","text"), point_args_group = dict(shape = "^", size = 3), text_args_group = dict(size = 11.5), palette = None, x_lim = None, y_lim = None, x_label = None, y_label = None, title = None, add_hline = True, add_vline = True, add_grid = True, ggtheme = None ): """ Visualize Discriminant Correspondence Analysis (DiCA) - Graph of variables/categories Discriminant correspondence analysis (DiCA) is a canonical discriminant analysis on qualitative predictors. :class:`~discrimintools.fviz_dica_var` provides plotnine based elegant visualization of DiCA outputs for variables/categories. Parameters ---------- obj : class An instance of class :class:`~discrimintools.DiCA`. axis : list, defaul = [0,1] Dimensions to be plotted. geom_var : str, list or tuple, default = ('point','text') Geometry to be used for the graph. Possible values are the combinaison of ["point","text"]. - 'point' to show only points, - 'text' to show only labels, - ('point','text') to show both types. repel : bool, default = False To avoid overplotting text labels. col_var : str, default = 'blue' Color for the variables points and texts. point_args_var : dict, default = dict(shape = "o", size = 1.5) Keywords arguments for `geom_point <https://plotnine.org/reference/geom_point.html>`_. text_args_var : dict, default = dict(size = 8) KeywordS arguments for `geom_text <https://plotnine.org/reference/geom_text.html>`_. add_group : bool, default = True To show group coordinates. geom_group : str, list or tuple, default = ('point','text') See ``geom_ind``. point_args_group : dict, default = dict(shape = "^", size = 3) See ``point_args_ind``. text_args_group : dict, default = dict(size = 11.5) See ``text_args_ind``. palette : None or list, default = None Color palette to be used for coloring by groups. x_lim : None, list or tuple, default = None The range of the plotted ``x`` values. y_lim : None, list or tuple, default = None The range of the plotted ``y`` values. x_label : None or str, default = None The label text of ``x``. y_label : None or str, default = None The label text of ``y``. title : None or str, default = None The title of the graph you draw. add_hline : bool, default = True To add a horizontal line. add_vline : bool, default = True To add a vertical line. add_grid : bool, default = True To add grid customization. ggtheme : function, default = None Plotnine `theme <https://plotnine.org/guide/themes-premade.html>`_ name. Returns ------- p : class A object of class ggplot. See also -------- :class:`~discrimintools.fviz_dica` Visualize Discriminant Correspondence Analysis (DiCA). :class:`~discrimintools.fviz_dica_biplot` Visualize Discriminant Correspondence Analysis (DiCA) - Biplot of individuals and variables. :class:`~discrimintools.fviz_dica_ind` Visualize Discriminant Correspondence Analysis (DiCA) - Graph of individuals. :class:`~discrimintools.fviz_dica_quali_var` Visualize Discriminant Correspondence Analysis (DiCA) - Graph of qualitative variables. :class:`~discrimintools.fviz_dist` Visualize distance between barycenter. Examples -------- >>> from discrimintools.datasets import load_divay >>> from discrimintools import DiCA, fviz_dica_var >>> D = load_divay() # load training data >>> y, X = D["Region"], D.drop(columns=["Region"]) # split into X and y >>> clf = DiCA() >>> clf.fit(X,y) DiCA() >>> p = fviz_dica_var(clf) # graph of variables >>> print(p) .. figure:: ../../../../_static/fviz_dica_var.png Graph of variables - DiCA """ #--------------------------------------------------------------------------------------------------------------------------------------------------------------------- #check if obj is an instance of class DiCA #--------------------------------------------------------------------------------------------------------------------------------------------------------------------- if obj.model_ != "dica": raise TypeError("'obj' must be an instance of class DiCA") #--------------------------------------------------------------------------------------------------------------------------------------------------------------------- #check if valid axis #--------------------------------------------------------------------------------------------------------------------------------------------------------------------- check_is_valid_axis(obj,axis) #--------------------------------------------------------------------------------------------------------------------------------------------------------------------- #check if valid geom #--------------------------------------------------------------------------------------------------------------------------------------------------------------------- check_is_valid_geom(geom_var,('point','text')) #initialize p = ggplot() #--------------------------------------------------------------------------------------------------------------------------------------------------------------------- #add variables/categories coordinates #--------------------------------------------------------------------------------------------------------------------------------------------------------------------- p = add_scatter(p=p,data=obj.var_.coord,axis=axis,geom=geom_var,repel=repel,color=col_var,points_args=point_args_var,text_args=text_args_var) #--------------------------------------------------------------------------------------------------------------------------------------------------------------------- #add classes coordinates #--------------------------------------------------------------------------------------------------------------------------------------------------------------------- if add_group: #check if valid geom check_is_valid_geom(geom_group,('point','text')) #set text arguments - add overlap arguments if repel and "text" in geom_group: text_args_group = dict(**text_args_group,adjust_text=dict(arrowprops=dict(arrowstyle='-',lw=1.0))) #set index index = obj.call_.classes #set palette if palette is None: palette = list_colors[:len(index)] elif not isinstance(palette,(list,tuple)): raise TypeError("'palette' must be a list or a tuple of colors") elif len(palette) != len(index): raise TypeError(f"'palette' must be a list or tuple with length {len(index)}.") #classes coordinates class_coord = obj.classes_.coord class_coord[f"{obj.call_.target}"] = list(class_coord.index) #add points if "point" in geom_group: p = p + geom_point(data=class_coord,mapping=aes(x = f"Can{axis[0]+1}",y=f"Can{axis[1]+1}",color=obj.call_.target,label=class_coord.index),**point_args_group) #add texts if "text" in geom_group: p = p + geom_text(data=class_coord,mapping=aes(x = f"Can{axis[0]+1}",y=f"Can{axis[1]+1}",color=obj.call_.target,label=class_coord.index),**text_args_group) #add color scale p = p + scale_color_manual(values=palette,labels=index) #--------------------------------------------------------------------------------------------------------------------------------------------------------------------- #add others elements #--------------------------------------------------------------------------------------------------------------------------------------------------------------------- #set x label if x_label is None: x_label = "Can{} ({}%)".format(axis[0]+1,round(obj.eig_.iloc[axis[0],2],1)) #set y label if y_label is None: y_label = "Can{} ({}%)".format(axis[1]+1,round(obj.eig_.iloc[axis[1],2],1)) #set title if title is None: title = "Graph of variables/categories - {}".format(obj.__class__.__name__) p = set_axis(p=p,x_lim=x_lim,y_lim=y_lim,x_label=x_label,y_label=y_label,title=title,add_hline=add_hline,add_vline=add_vline,add_grid=add_grid,ggtheme=ggtheme) return p
[docs] def fviz_dica_quali_var( obj, axis = [0,1], geom_var = ("point","text"), repel = False, col_var = "blue", point_args_var = dict(shape = "o", size = 1.5), text_args_var = dict(size = 8), x_lim = (0,1), y_lim = (0,1), x_label = None, y_label = None, title = None, add_hline = True, add_vline = True, add_grid = True, ggtheme = None ): """ Visualize Discriminant Correspondence Analysis (DiCA) - Graph of qualitative variables Discriminant correspondence analysis (DiCA) is a canonical discriminant analysis on qualitative predictors. :class:`~discrimintools.fviz_dica_quali_var` provides plotnine based elegant visualization of DiCA outputs for qualitative variables. Parameters ---------- obj : class An instance of class :class:`~discrimintools.DiCA`. axis : list, defaul = [0,1] Dimensions to be plotted. geom_var : str, list or tuple, default = ('point','text') Geometry to be used for the graph. Possible values are the combinaison of ["point","text"]. - 'point' to show only points, - 'text' to show only labels, - ('point','text') to show both types. repel : bool, default = False To avoid overplotting text labels. col_var : str, default = 'blue' Color for the qualitative variables points and texts. point_args_var : dict, default = dict(shape = "o", size = 1.5) Keywords arguments for `geom_point <https://plotnine.org/reference/geom_point.html>`_. text_args_var : dict, default = dict(size = 8) Keywords arguments for `geom_text <https://plotnine.org/reference/geom_text.html>`_. x_lim : None, list or tuple, default = (0,1) The range of the plotted ``x`` values. y_lim : None, list or tuple, default = (0,1) The range of the plotted ``y`` values. x_label : None or str, default = None The label text of ``x``. y_label : None or str, default = None The label text of ``y``. title : None or str, default = None The title of the graph you draw. add_hline : bool, default = True To add a horizontal line. add_vline : bool, default = True To add a vertical line. add_grid : bool, default = True To add grid customization. ggtheme : function, default=None Plotnine `theme <https://plotnine.org/guide/themes-premade.html>`_ name. Returns ------- p : class A object of class ggplot. See also -------- :class:`~discrimintools.fviz_dica` Visualize Discriminant Correspondence Analysis (DiCA) :class:`~discrimintools.fviz_dica_biplot` Visualize Discriminant Correspondence Analysis (DiCA) - Biplot of individuals and variables :class:`~discrimintools.fviz_dica_ind` Visualize Discriminant Correspondence Analysis (DiCA) - Graph of individuals :class:`~discrimintools.fviz_dica_var` Visualize Discriminant Correspondence Analysis (DiCA) - Graph of variables/categories :class:`~discrimintools.fviz_dist` Visualize distance between barycenter. Examples -------- >>> from discrimintools.datasets import load_divay >>> from discrimintools import DiCA, fviz_dica_quali_var >>> D = load_divay("train") # load training data >>> y, X = D["Region"], D.drop(columns=["Region"]) # split into X and y >>> clf = DiCA() >>> clf.fit(X,y) DiCA() >>> p = fviz_dica_quali_var(clf) # graph of qualitative variables >>> print(p) .. figure:: ../../../../_static/fviz_dica_quali_var.png Graph of qualitative variables - DiCA """ #--------------------------------------------------------------------------------------------------------------------------------------------------------------------- #check if obj is an instance of class DiCA #--------------------------------------------------------------------------------------------------------------------------------------------------------------------- if obj.model_ != "dica": raise TypeError("'obj' must be an instance of class DiCA") #--------------------------------------------------------------------------------------------------------------------------------------------------------------------- #check if valid axis #--------------------------------------------------------------------------------------------------------------------------------------------------------------------- check_is_valid_axis(obj,axis) #--------------------------------------------------------------------------------------------------------------------------------------------------------------------- #check if valid geom #--------------------------------------------------------------------------------------------------------------------------------------------------------------------- check_is_valid_geom(geom_var,('point','text')) #initialize p = ggplot() #--------------------------------------------------------------------------------------------------------------------------------------------------------------------- #add variables/categories coordinates #--------------------------------------------------------------------------------------------------------------------------------------------------------------------- p = add_scatter(p=p,data=obj.var_.eta2,axis=axis,geom=geom_var,repel=repel,color=col_var,points_args=point_args_var,text_args=text_args_var) #--------------------------------------------------------------------------------------------------------------------------------------------------------------------- #add others elements #--------------------------------------------------------------------------------------------------------------------------------------------------------------------- #set x label if x_label is None: x_label = "Can{} ({}%)".format(axis[0]+1,round(obj.eig_.iloc[axis[0],2],1)) #set y label if y_label is None: y_label = "Can{} ({}%)".format(axis[1]+1,round(obj.eig_.iloc[axis[1],2],1)) #set title if title is None: title = "Graph of qualitative variables - {}".format(obj.__class__.__name__) p = set_axis(p=p,x_lim=x_lim,y_lim=y_lim,x_label=x_label,y_label=y_label,title=title,add_hline=add_hline,add_vline=add_vline,add_grid=add_grid,ggtheme=ggtheme) return p
[docs] def fviz_dica_biplot( obj, axis = [0,1], geom_ind = ("point","text"), repel = False, point_args_ind = dict(shape = "o", size = 1.5), text_args_ind = dict(size = 8), geom_var = ("point","text"), col_var = "blue", point_args_var = dict(shape = "o", size = 1.5), text_args_var = dict(size = 8), add_group = True, geom_group = ("point","text"), point_args_group = dict(shape = "^", size = 3), text_args_group = dict(size = 11.5), palette = None, x_lim = None, y_lim = None, x_label = None, y_label = None, title = None, add_hline = True, add_vline = True, add_grid = True, ggtheme = None ): """ Visualize Discriminant Correspondence Analysis (DiCA) - Biplot of individuals and variables Discriminant correspondence analysis (DiCA) is a canonical discriminant analysis on qualitative predictors. :class:`~discrimintools.fviz_dica_biplot` provides plotnine based elegant visualization of DiCA outputs for individuals and variables. Parameters ---------- obj : class An object of class :class:`~discrimintools.DiCA`. **kwargs : further arguments passed to or from other methods. See :class:`~discrimintools.fviz_dica_ind`, :class:`~discrimintools.fviz_dica_var`. Returns ------- p : class A object of class ggplot. See also -------- :class:`~discrimintools.fviz_dica` Visualize Discriminant Correspondence Analysis (DiCA) :class:`~discrimintools.fviz_dica_ind` Visualize Discriminant Correspondence Analysis (DiCA) - Graph of individuals :class:`~discrimintools.fviz_dica_quali_var` Visualize Discriminant Correspondence Analysis (DiCA) - Graph of qualitative variables :class:`~discrimintools.fviz_dica_var` Visualize Discriminant Correspondence Analysis (DiCA) - graph of variables/categories :class:`~discrimintools.fviz_dist` Visualize distance between barycenter. Examples -------- >>> from discrimintools.datasets import load_divay >>> from discrimintools import DiCA, fviz_dica_biplot >>> D = load_divay() # load training data >>> y, X = D["Region"], D.drop(columns=["Region"]) # split into X and y >>> clf = DiCA() >>> clf.fit(X,y) DiCA() >>> p = fviz_dica_biplot(clf) # biplot of individuals and variables >>> print(p) .. figure:: ../../../../_static/fviz_dica_biplot.png Biplot of individuals and variables """ #--------------------------------------------------------------------------------------------------------------------------------------------------------------------- #check if obj is an instance of class DiCA #--------------------------------------------------------------------------------------------------------------------------------------------------------------------- if obj.model_ != "dica": raise TypeError("'obj' must be an instance of class DiCA") #--------------------------------------------------------------------------------------------------------------------------------------------------------------------- #check if valid iaxis #--------------------------------------------------------------------------------------------------------------------------------------------------------------------- check_is_valid_axis(obj,axis) #--------------------------------------------------------------------------------------------------------------------------------------------------------------------- #check if valid geom #--------------------------------------------------------------------------------------------------------------------------------------------------------------------- check_is_valid_geom(geom_ind,('point','text')) #--------------------------------------------------------------------------------------------------------------------------------------------------------------------- #set text arguments - add overlap arguments #--------------------------------------------------------------------------------------------------------------------------------------------------------------------- if repel and "text" in geom_ind: text_args_ind = dict(**text_args_ind,adjust_text=dict(arrowprops=dict(arrowstyle='-',lw=1.0))) #--------------------------------------------------------------------------------------------------------------------------------------------------------------------- #set index and palette #--------------------------------------------------------------------------------------------------------------------------------------------------------------------- #set index index = obj.call_.classes #set palette if palette is None: palette = list_colors[:len(index)] elif not isinstance(palette,(list,tuple)): raise TypeError("'palette' must be a list or a tuple of colors") elif len(palette) != len(index): raise TypeError(f"'palette' must be a list or tuple with length {len(index)}.") #set x_text and y_text x_text, y_text = "Can{}".format(axis[0]+1), "Can{}".format(axis[1]+1) #create coordinate coord = concat((obj.ind_.coord,obj.call_.y),axis=1) #initialize p = ggplot(data=coord,mapping=aes(x=x_text,y=y_text,label=coord.index)) #--------------------------------------------------------------------------------------------------------------------------------------------------------------------- #add individuals coordinates #--------------------------------------------------------------------------------------------------------------------------------------------------------------------- if "point" in geom_ind: p = p + geom_point(aes(color=obj.call_.target),**point_args_ind) if "text" in geom_ind: p = p + geom_text(aes(color=obj.call_.target),**text_args_ind) #--------------------------------------------------------------------------------------------------------------------------------------------------------------------- #add variables coordinates #--------------------------------------------------------------------------------------------------------------------------------------------------------------------- p = add_scatter(p=p,data=obj.var_.coord,axis=axis,geom=geom_var,repel=repel,color=col_var,points_args=point_args_var,text_args=text_args_var) #--------------------------------------------------------------------------------------------------------------------------------------------------------------------- #add classes coordinates #--------------------------------------------------------------------------------------------------------------------------------------------------------------------- if add_group: #check if valid geom check_is_valid_geom(geom_group,('point','text')) #set text arguments - add overlap arguments if repel and "text" in geom_group: text_args_group = dict(**text_args_group,adjust_text=dict(arrowprops=dict(arrowstyle='-',lw=1.0))) #classes coordinates class_coord = obj.classes_.coord class_coord[f"{obj.call_.target}"] = list(class_coord.index) if "point" in geom_group: p = p + geom_point(data=class_coord,mapping=aes(x=x_text,y=y_text,color=obj.call_.target,label=class_coord.index),**point_args_group) if "text" in geom_group: p = p + geom_text(data=class_coord,mapping=aes(x=x_text,y=y_text,color=obj.call_.target,label=class_coord.index),**text_args_group) #--------------------------------------------------------------------------------------------------------------------------------------------------------------------- #add color scale #--------------------------------------------------------------------------------------------------------------------------------------------------------------------- p = p + scale_color_manual(values=palette,labels=index) #--------------------------------------------------------------------------------------------------------------------------------------------------------------------- #add others elements #--------------------------------------------------------------------------------------------------------------------------------------------------------------------- #set x label if x_label is None: x_label = "Can{} ({}%)".format(axis[0]+1,round(obj.eig_.iloc[axis[0],2],1)) #set y label if y_label is None: y_label = "Can{} ({}%)".format(axis[1]+1,round(obj.eig_.iloc[axis[1],2],1)) #set title if title is None: title = "Biplot of individuals and variables - {}".format(obj.__class__.__name__) p = set_axis(p=p,x_lim=x_lim,y_lim=y_lim,x_label=x_label,y_label=y_label,title=title,add_hline=add_hline,add_vline=add_vline,add_grid=add_grid,ggtheme=ggtheme) return p
[docs] def fviz_dica( obj, element="biplot",**kwargs ): """ Visualize Discriminant Correspondence Analysis (DiCA) Discriminant correspondence analysis (DiCA) is a canonical discriminant analysis on qualitative predictors. :class:`~discrimintools.fviz_dica` provides plotnine based elegant visualization of DiCA outputs. Parameters ---------- obj : class An object of class :class:`~discrimintools.DiCA`. element : str, default = 'biplot' The element to plot from the output, possible values: - 'ind' for the individuals graphs - 'var' for the variables graphs - 'quali_var' for qualitative variables graphs - 'biplot' for biplot of individuals and variables - 'dist' for the distance graphs **kwargs : further arguments passed to or from other methods Returns ------- p : class A object of class ggplot. See also -------- :class:`~discrimintools.fviz_dica_biplot` Visualize Discriminant Correspondence Analysis (DiCA) - Biplot of individuals and variables :class:`~discrimintools.fviz_dica_ind` Visualize Discriminant Correspondence Analysis (DiCA) - Graph of individuals :class:`~discrimintools.fviz_dica_quali_var` Visualize Discriminant Correspondence Analysis (DiCA) - Graph of qualitative variables :class:`~discrimintools.fviz_dica_var` Visualize Discriminant Correspondence Analysis (DiCA) - graph of variables/categories :class:`~discrimintools.fviz_dist` Visualize distance between barycenter. Examples -------- >>> from discrimintools.datasets import load_divay >>> from discrimintools import DiCA, fviz_dica >>> D = load_divay() # load training dataset >>> y, X = D["Region"], D.drop(columns=["Region"]) # split into X and y >>> clf = DiCA() >>> clf.fit(X,y) DiCA() Graph of individuals... >>> p = fviz_dica(clf, "ind") # graph of individuals >>> print(p) .. figure:: ../../../../_static/fviz_dica_ind.png Graph of individuals - DiCA Graph of variables/categories ... >>> p = fviz_dica(clf, "var") # graph of variables/categories >>> print(p) .. figure:: ../../../../_static/fviz_dica_var.png Graph of variables/categories - DiCA Graph of qualitative variables... >>> p = fviz_dica(clf, "quali_var") # graph of qualitative variables >>> print(p) .. figure:: ../../../../_static/fviz_dica_quali_var.png Graph of qualitative variables - DiCA Biplot of individuals and variables... >>> p = fviz_dica(clf, "biplot") # biplot of individuals and variables >>> print(p) .. figure:: ../../../../_static/fviz_dica_biplot.png Biplot of individuals and variables - DiCA Distance between class barycenter. >>> p = fviz_dica(clf, "dist") # distance between barycenter >>> print(p) .. figure:: ../../../../_static/fviz_dica_dist.png Distance between barycenter - DiCA """ if element == "ind": return fviz_dica_ind(obj,**kwargs) elif element == "var": return fviz_dica_var(obj,**kwargs) elif element == "quali_var": return fviz_dica_quali_var(obj,**kwargs) elif element == "biplot": return fviz_dica_biplot(obj,**kwargs) elif element == "dist": return fviz_dist(obj,**kwargs) else: raise ValueError("'element' should be one of 'ind', 'var', 'biplot', 'dist'")