class_docstr: Base class for themes
  
  In general, only complete themes should subclass this class.
  
  Parameters
  ----------
  complete : bool
      Themes that are complete will override any existing themes.
      themes that are not complete (ie. partial) will add to or
      override specific elements of the current theme. e.g:
  
      ```python
      theme_gray() + theme_xkcd()
      ```
  
      will be completely determined by [](`~plotnine.themes.theme_xkcd`),
      but:
  
      ```python
      theme_gray() + theme(axis_text_x=element_text(angle=45))
      ```
  
      will only modify the x-axis text.
  kwargs: dict
      kwargs are :ref:`themeables <themeables>`. The themeables are
      elements that are subclasses of `themeable`. Many themeables
      are defined using theme elements i.e
  
      - [](`~plotnine.themes.element_line`)
      - [](`~plotnine.themes.element_rect`)
      - [](`~plotnine.themes.element_text`)
  
      These simply bind together all the aspects of a themeable
      that can be themed. See [](`~plotnine.themes.themeable.themeable`).
  
  Notes
  -----
  When subclassing, make sure to call :python:`theme.__init__`.
  After which you can customise :python:`self._rcParams` within
  the `__init__` method of the new theme. The `rcParams`
  should not be modified after that.
class_docstr_tok: ["Base","class","for","themes","In","general",",","only","complete","themes","should","subclass","this","class",".","Parameters","--","--","--","--","--","complete",":","bool","Themes","that","are","complete","will","override","any","existing","themes",".","themes","that","are","not","complete","(","ie",".","partial",")","will","add","to","or","override","specific","elements","of","the","current","theme",".","e.g",":","``","`","python","theme_gray","(",")","+","theme_xkcd","(",")","``","`","will","be","completely","determined","by","[","]","(","`","~plotnine.themes.theme_xkcd","`",")",",","but",":","``","`","python","theme_gray","(",")","+","theme","(","axis_text_x=element_text","(","angle=45",")",")","``","`","will","only","modify","the","x-axis","text",".","kwargs",":","dict","kwargs","are",":","ref",":","`","themeables","<","themeables",">","`",".","The","themeables","are","elements","that","are","subclasses","of","`","themeable","`",".","Many","themeables","are","defined","using","theme","elements","i.e","-","[","]","(","`","~plotnine.themes.element_line","`",")","-","[","]","(","`","~plotnine.themes.element_rect","`",")","-","[","]","(","`","~plotnine.themes.element_text","`",")","These","simply","bind","together","all","the","aspects","of","a","themeable","that","can","be","themed",".","See","[","]","(","`","~plotnine.themes.themeable.themeable","`",")",".","Notes","--","--","-","When","subclassing",",","make","sure","to","call",":","python",":","`","theme.__init__","`",".","After","which","you","can","customise",":","python",":","`","self._rcParams","`","within","the","`","__init__","`","method","of","the","new","theme",".","The","`","rcParams","`","should","not","be","modified","after","that","."]
docstr: Apply this theme, then apply additional modifications in order.
  
  This method will be called once after plot has completed.
  Subclasses that override this method should make sure that the
  base class method is called.
docstr_tok: ["Apply","this","theme",",","then","apply","additional","modifications","in","order",".","This","method","will","be","called","once","after","plot","has","completed",".","Subclasses","that","override","this","method","should","make","sure","that","the","base","class","method","is","called","."]
code: def apply(self):
      """
      Apply this theme, then apply additional modifications in order.
  
      This method will be called once after plot has completed.
      Subclasses that override this method should make sure that the
      base class method is called.
      """
      for th in self.themeables.values():
          th.apply(self)
  
imports: from __future__ import annotations
  import typing
  from copy import copy, deepcopy
  from typing import overload
  from ..exceptions import PlotnineError
  from ..options import get_option, set_option
  from .themeable import Themeables, themeable
label_desc: Use image node_id 3 for calling the theme obj's underlying member method code with example usage: obj.apply() without return types