code: def _seaborn_viz_violin(
      data, x: str, contrast: Optional[str] = None, **kwargs
  ):
      """Plot a single violin plot.
  
      Args:
          data (DataFrame): The data
          x (str): The name of the column to plot.
          contrast (str, optional): The name of the categorical column to use for multiple contrasts.
          **kwargs: Keyword arguments passed to seaborn.violinplot
  
      Raises:
          ValueError: Not a numeric column.
  
      Returns:
          Seaborn Axis Object
      """
      if x not in data.select_dtypes("number").columns:
          raise ValueError("x must be numeric column")
  
      default_violin_kwargs = {"cut": 0}
      violin_kwargs = {**default_violin_kwargs, **(kwargs or {})}
      if contrast:
          data[contrast] = data[contrast].astype("category")
          ax = sns.violinplot(
              x=x, y=contrast, data=data, **violin_kwargs
          )
      else:
          ax = sns.violinplot(x=x, data=data, **violin_kwargs)
      return ax
  
imports: from typing import Dict, Any, Optional
  from matplotlib.figure import Figure
  from matplotlib.gridspec import GridSpec
  import seaborn
  import numpy
  from data_describe.config._config import get_option
  from data_describe.metrics.univariate import spikey, skewed
  from data_describe._widget import BaseWidget
  from data_describe.compat import _is_dataframe
  from data_describe.backends import _get_viz_backend, _get_compute_backend
label_desc: Use image node_id 7 for calling a global function with example usage: _seaborn_viz_violin(data, x, contrast) and returns: ax