class_docstr: Dodge and jitter to minimise overlap
  
  Useful when aligning points generated through
  [](`~plotnine.geoms.geom_point`) with dodged a
  [](`~plotnine.geoms.geom_boxplot`).
  
  Parameters
  ----------
  jitter_width :
      Proportion to jitter in horizontal direction.
      If `None`, `0.4` of the resolution of the data.
  jitter_height :
      Proportion to jitter in vertical direction.
  dodge_width :
      Amount to dodge in horizontal direction.
  random_state :
      Seed or Random number generator to use. If `None`, then
      numpy global generator :class:`numpy.random` is used.
code: def __init__(
      self,
      jitter_width: Optional[float] = None,
      jitter_height: float = 0,
      dodge_width: float = 0.75,
      random_state: Optional[int | np.random.RandomState] = None,
  ):
      self.params = {
          "jitter_width": jitter_width,
          "jitter_height": jitter_height,
          "dodge_width": dodge_width,
          "random_state": random_state,
      }
  
file_path: plotnine/plotnine/positions/position_jitterdodge.py
imports: from __future__ import annotations
  import typing
  from contextlib import suppress
  from copy import copy
  from .._utils import jitter, resolution
  from ..exceptions import PlotnineError
  from ..mapping.aes import SCALED_AESTHETICS
  from .position import position
  from .position_dodge import position_dodge
label_desc: Use image node_id 1 to create a new position_jitterdodge object from inherited base classes: position with example: obj = position_jitterdodge(jitter_width, jitter_height, dodge_width, random_state)