code: def draw_violinplot_hv(
      dft,
      dep,
      nums,
      chart_format,
      modeltype="Regression",
      mk_dir="AutoViz_Plots",
      verbose=0,
  ):
      ensure_hvplot_imported()
      dft = copy.deepcopy(dft)
      image_count = 0
      imgdata_list = list()
      width_size = 800
      height_size = 500
      if type(dep) == str:
          nums = [x for x in nums if x not in [dep]]
      else:
          nums = [x for x in nums if x not in dep]
      colors = cycle("brycgkbyrcmgkbyrcmgkbyrcmgkbyr")
      plot_name = "violinplots"
      #############################################################################
      if modeltype in ["Regression", "Clustering"]:
          ### This is for Regression and None Dep variable problems only ##
          number_in_each_row = 30
          cmap_list = [
              "#75968f",
              "#a5bab7",
              "#c9d9d3",
              "#e2e2e2",
              "#dfccce",
              "#ddb7b1",
              "#cc7878",
              "#933b41",
              "#550b1d",
          ]
          ###### This is for looping over variables 10 at a time only ##########################
          df_p = dft[nums]
          if df_p.shape[1] < number_in_each_row:
              iter_limit = number_in_each_row
          else:
              iter_limit = max(
                  number_in_each_row, int(df_p.shape[1] / 5 + 0.5)
              )
          # print('Current number of Numeric Variables = %d ' %(df_p.shape[1],))
          ###### This is for looping over variables 10 at a time only ##########################
          drawobjv_list = []  ## this keeps track of the actual values
          drawobj_list = []  ## this keeps track of the names
          counter = 0
          for i in range(0, df_p.shape[1], iter_limit):
              new_end = i + iter_limit
              # print('i = ',i,"new end = ", new_end)
              if i == 0:
                  title_string = "using first %d variables..." % (
                      iter_limit
                  )
                  # print(title_string )
              else:
                  title_string = "using next %d variables..." % (
                      iter_limit
                  )
                  # print(title_string )
              conti = nums[i:new_end]
              ######################### Add Standard Scaling here ##################################
              from sklearn.preprocessing import StandardScaler
  
              SS = StandardScaler()
              data = pd.DataFrame(
                  SS.fit_transform(dft[conti]), columns=conti
              )
              var_name = "drawobjv_list[" + str(counter) + "]"
              drawobj_list.append(var_name)
              drawobjv_list.append(var_name)
              drawobj = data.hvplot(
                  kind="violin",
                  label="Violin Plot %s (Standard Scaled)"
                  % title_string,
                  rot=70,  # height=height_size,width=width_size
              )
              drawobjv_list[counter] = drawobj
              counter += 1
          ######### After collecting all the drawobjv's put them in a dynamic map and display them ###
          combined_charts = (
              "(" + "".join([x + "+" for x in drawobj_list])[:-1] + ")"
          )
          hv_all = pn.panel(
              eval(combined_charts)
          )  #### This is where we add them to the list ######
          if verbose == 2:
              imgdata_list = append_panels(
                  hv_all, imgdata_list, chart_format
              )
              image_count += 1
          #### In the case of violin plots, you have to create multiple tabs or plots ###
          if chart_format in ["server", "bokeh_server", "bokeh-server"]:
              print("%s can be found in URL below:" % plot_name)
              server = pn.serve(hv_all, start=True, show=True)
              # hv_all.show()  ### for some reason .show errors in violin plots
          elif chart_format == "html":
              save_html_data(hv_all, chart_format, plot_name, mk_dir)
          else:
              display(
                  hv_all
              )  ### This will display it in a Jupyter Notebook. If you want it on a server, you use drawobj.show()
              # display_obj(hv_all)  ### This will display it in a Jupyter Notebook. If you want it on a server, you use drawobj.show()
      else:
          #### This is for Classification problems ###################
          number_in_each_row = 30
          df_p = dft[nums]
          if df_p.shape[1] < number_in_each_row:
              iter_limit = number_in_each_row
          else:
              iter_limit = max(
                  number_in_each_row, int(df_p.shape[1] / 5 + 0.5)
              )
          ###### This is for looping over variables 10 at a time only ##########################
          target_vars = np.unique(dft[dep])
          dmaps = []
          combined_charts = ""
          counter = 0
          drawobjv_list = []  ## this keeps track of the actual values
          drawobj_list = []  ## this keeps track of the names
          for symbol in target_vars:
              color = next(colors)
              sup_title = "Violin Plot for %s = %s" % (dep, symbol)
              for i in range(0, df_p.shape[1], iter_limit):
                  new_end = i + iter_limit
                  if i == 0:
                      title_string = "first %d variables" % (
                          df_p.shape[1]
                      )
                  else:
                      title_string = "next %d variables" % (
                          df_p.shape[1]
                      )
                  conti = nums[i:new_end]
                  ######################### Add Standard Scaling here ##################################
                  from sklearn.preprocessing import StandardScaler
  
                  SS = StandardScaler()
                  data = pd.DataFrame(
                      SS.fit_transform(dft[conti]), columns=conti
                  )
                  data[dep] = dft[dep].values
                  dft_sym = data[data[dep] == symbol][conti]
                  var_name = "drawobjv_list[" + str(counter) + "]"
                  drawobj_list.append(var_name)
                  drawobjv_list.append(var_name)
                  drawobj = (
                      dft_sym.hvplot(
                          kind="violin",
                          title="%s: %s" % (sup_title, title_string),
                      )
                      .opts(framewise=True)
                      .opts(
                          box_color=color,
                          height=height_size,
                          width=width_size,
                      )
                  )
                  drawobjv_list[counter] = drawobj
                  counter += 1
          ######### After collecting all the drawobjv's put them in a panel and display them ###
          combined_charts = "".join([x + "+" for x in drawobj_list])[
              :-1
          ]
          ###########  This is where you put the Panel Together ############
          hv_all = pn.panel(eval(combined_charts))
          if chart_format.lower() in [
              "server",
              "bokeh_server",
              "bokeh-server",
          ]:
              ### If you want it on a server, you use drawobj.show()
              print("%s can be found in URL below:" % plot_name)
              server = pn.serve(hv_all, start=True, show=True)
          elif chart_format == "html":
              save_html_data(hv_all, chart_format, plot_name, mk_dir)
          else:
              ### This will display it in a Jupyter Notebook.
              display(hv_all)
          #### This is where we add them to the list ######
          if verbose == 2:
              imgdata_list = append_panels(
                  hv_all, imgdata_list, chart_format
              )
              image_count += 1
      ########## End of Violin Plots #########
      return hv_all
  
imports: import numpy
  import pandas
  from autoviz.AutoViz_Utils import *
  import copy
  import warnings
  import logging
  import warnings
  from sklearn.exceptions import DataConversionWarning
  import matplotlib
  import matplotlib.pyplot
  import io
  import seaborn
  import re
  import pdb
  import pprint
  import matplotlib
  from itertools import cycle, combinations
  from collections import defaultdict
  import copy
  import time
  import sys
  import random
  import xlrd
  import statsmodels
  from io import BytesIO
  import base64
  from functools import reduce
  import traceback
  import xgboost
  from xgboost.sklearn import XGBClassifier
  from xgboost.sklearn import XGBRegressor
  import os
  from .classify_method import classify_columns
label_desc: Use image node_id 15 for calling a global function with example usage: draw_violinplot_hv(dft, dep, nums, chart_format, modeltype, mk_dir, verbose) and returns: hv_all