code: def position_jitter(width=None, height=None, seed=None):
      """
      Adjust position by assigning random noise to points. Better for discrete values.
  
      Parameters
      ----------
      width : float
          Jittering width.
          The value of width is relative and typically ranges between 0 and 0.5.
          Values that are greater than 0.5 lead to overlapping of the points.
      height : float
          Jittering height.
          The value of height is relative and typically ranges between 0 and 0.5.
          Values that are greater than 0.5 lead to overlapping of the points.
      seed : int
          A random seed to make the jitter reproducible.
          If None (the default value), the seed is initialised with a random value.
  
      Returns
      -------
      `FeatureSpec`
          Geom object position specification.
  
      Notes
      -----
      Adjust position by dodging overlaps to the side.
  
      Examples
      --------
      .. jupyter-execute::
          :linenos:
          :emphasize-lines: 12
  
          import numpy as np
          from lets_plot import *
          LetsPlot.setup_html()
          n = 100
          np.random.seed(42)
          x = np.random.randint(4, size=n)
          y = np.random.randint(3, size=n)
          c = np.char.add(x.astype(str), y.astype(str))
          ggplot({'x': x, 'y': y, 'c': c}, aes('x', 'y')) + \\
              geom_point(aes(fill='c'), show_legend=False, \\
                         size=8, alpha=.5, shape=21, color='black', \\
                         position=position_jitter(width=.2, height=.2, seed=42))
  
      """
      return _pos("jitter", width=width, height=height, seed=seed)
  
file_path: lets-plot/python-package/lets_plot/plot/pos.py
imports: from .core import FeatureSpec
label_desc: Use image node_id 3 for calling a global function with example usage: position_jitter(width, height, seed) and returns: _pos