code: def _plot_univariate_classification(
      features,
      features_imp,
      target,
      drop_outliers,
      target_col,
      univariate_plot,
      hue_order,
  ):
      # univariate plots
      show_top = _get_n_top(features, "continuous")
      f, p = f_classif(features_imp, target)
      top_k = np.argsort(f)[-show_top:][::-1]
      # FIXME this will fail if a feature is always
      # NaN for a particular class
      best_features = features.iloc[:, top_k].copy()
  
      if drop_outliers:
          for col in best_features.columns:
              inliers = _find_inliers(best_features.loc[:, col])
              best_features[~inliers] = np.NaN
  
      best_features[target_col] = target
  
      if univariate_plot == "kde":
          df = best_features.melt(target_col)
          rows, cols = find_pretty_grid(show_top)
  
          g = sns.FacetGrid(
              df,
              col="variable",
              hue=target_col,
              col_wrap=cols,
              sharey=False,
              sharex=False,
              hue_order=hue_order,
          )
          g = g.map(sns.kdeplot, "value", shade=True)
          g.axes[0].legend()
          plt.suptitle("Continuous features by target", y=1.02)
      elif univariate_plot == "histogram":
          # row_height = 3 if target.nunique() < 5 else 5
          n_classes = target.nunique()
          row_height = (
              n_classes * 1 if n_classes < 10 else n_classes * 0.5
          )
          fig, axes = _make_subplots(
              n_plots=show_top, row_height=row_height
          )
          for i, (ind, ax) in enumerate(zip(top_k, axes.ravel())):
              class_hists(
                  best_features,
                  best_features.columns[i],
                  target_col,
                  ax=ax,
                  legend=i == 0,
              )
              ax.set_title("F={:.2E}".format(f[ind]))
          for j in range(i + 1, axes.size):
              # turn off axis if we didn't fill last row
              axes.ravel()[j].set_axis_off()
      else:
          raise ValueError(
              "Unknown value for univariate_plot: ", univariate_plot
          )
      return f
  
imports: import warnings
  import numpy
  import matplotlib.pyplot
  import matplotlib
  import seaborn
  import pandas
  from sklearn.feature_selection import mutual_info_regression, mutual_info_classif, f_classif
  from sklearn.impute import SimpleImputer
  from sklearn.preprocessing import scale
  from sklearn.decomposition import PCA
  from sklearn.discriminant_analysis import LinearDiscriminantAnalysis
  from sklearn.metrics import recall_score
  from ..preprocessing import detect_types, clean
  from .utils import _check_X_target_col, _get_n_top, _make_subplots, _short_tick_names, _shortname, _prune_category_make_X, find_pretty_grid, _find_scatter_plots_classification, class_hists, discrete_scatter, mosaic_plot, _find_inliers, pairplot, _get_scatter_alpha, _get_scatter_size, _find_categorical_for_regression, _prune_categories, _apply_eng_formatter
  from .sankey import plot_sankey
  from warnings import warn
label_desc: Use image node_id 7 for calling a global function with example usage: _plot_univariate_classification(features, features_imp, target, drop_outliers, target_col, univariate_plot, hue_order) and returns: f