Source code for discrimintools.fviz_candisc

# -*- coding: utf-8 -*-
import plotnine as pn
import pandas as pd

from .text_label import text_label

[docs]def fviz_candisc(self, axis = [0,1], x_label = None, y_label = None, x_lim = None, y_lim = None, title = None, geom = ["point", "text"], point_size = 1.5, text_size = 8, text_type = "text", add_grid = True, add_hline = True, add_vline=True, repel = False, hline_color="black", hline_style="dashed", vline_color="black", vline_style ="dashed", ha = "center", va = "center", ggtheme=pn.theme_minimal()) -> pn: """ Draw the Canonical Discriminant Analysis (CANDISC) individuals graphs --------------------------------------------------------------------- Author: ------ Duvérier DJIFACK ZEBAZE duverierdjifack@gmail.com """ if self.model_ != "candisc": raise ValueError("'self' must be an object of class 'CANDISC'") if ((len(axis) !=2) or (axis[0] < 0) or (axis[1] > self.call_["n_components"]-1) or (axis[0] > axis[1])) : raise ValueError("You must pass a valid 'axis'.") # Initialize coordinates coord = self.ind_["coord"] # Add target variable coord = pd.concat((coord, self.call_["X"][self.call_["target"]]),axis=1) p = pn.ggplot(data=coord,mapping=pn.aes(x = f"LD{axis[0]+1}",y=f"LD{axis[1]+1}",label=coord.index,color=self.call_["target"])) if "point" in geom: p = p + pn.geom_point(size=point_size) if "text" in geom: if repel: p = p + text_label(text_type,mapping=pn.aes(color=self.call_["target"]),size=text_size,va=va,ha=ha, adjust_text={'arrowprops': {'arrowstyle': '-','lw':1.0}}) else: p = p + text_label(text_type,mapping=pn.aes(color=self.call_["target"]),size=text_size,va=va,ha=ha) # Set x label if x_label is None: x_label = f"Canonical {axis[0]+1}" # Set y label if y_label is None: y_label = f"Canonical {axis[1]+1}" # Set title if title is None: title = "Canonical Discriminant Analysis" p = p + pn.labs(title = title, x = x_label, y = y_label) # Set x limits if x_lim is not None: p = p + pn.xlim(x_lim) # Set y limits if y_lim is not None: p = p +pn.ylim(y_lim) if add_hline: p = p + pn.geom_hline(yintercept=0, colour=hline_color, linetype =hline_style) if add_vline: p = p+ pn.geom_vline(xintercept=0, colour=vline_color, linetype =vline_style) if add_grid: p = p + pn.theme(panel_grid_major = pn.element_line(color = "black",size = 0.5,linetype = "dashed")) # Add theme p = p + ggtheme return p