Source code for holoviews.__init__

HoloViews makes data analysis and visualization simple

HoloViews lets you focus on what you are trying to explore and convey, not on
the process of plotting.


- supports a wide range of data sources including Pandas, Dask, XArray
Rapids cuDF, Streamz, Intake, Geopandas, NetworkX and Ibis.
- supports the plotting backends Bokeh (default), Matplotlib and Plotly.
- allows you to drop into the rest of the
HoloViz ecosystem when more power or flexibility is needed.

For basic data exploration we recommend using the higher level hvPlot package,
which provides the familiar Pandas `.plot` api. You can drop into HoloViews
when needed.

To learn more check out To report issues or contribute
go to To join the community go to

How to use HoloViews in 3 simple steps

Work with the data source you already know and ❤️

>>> import pandas as pd
>>> station_info = pd.read_csv('')

Import HoloViews and configure your plotting backend

>>> import holoviews as hv
>>> hv.extension('bokeh')

Annotate your data

>>> scatter = (
...     hv.Scatter(station_info, kdims='services', vdims='ridership')
...     .redim(
...         services=hv.Dimension("services", label='Services'),
...         ridership=hv.Dimension("ridership", label='Ridership'),
...     )
...     .opts(size=10, color="red", responsive=True)
... )
>>> scatter

In a notebook this will display a nice scatter plot.

Note that the `kdims` (The key dimension(s)) represents the independent
variable(s) and the `vdims` (value dimension(s)) the dependent variable(s).

For more check out

How to get help

You can understand the structure of your objects by printing them.

>>> print(scatter)
:Scatter   [services]   (ridership)

You can get extensive documentation using ``.


In a notebook or ipython environment the usual

- `help` and `?` will provide you with documentation.
- `TAB` and `SHIFT+TAB` completion will help you navigate.

To ask the community go to
To report issues go to
import os
import sys

import param

__version__ = str(param.version.Version(fpath=__file__, archive_commit="$Format:%h$",

from . import util                                       # noqa (API import)
from .core import archive, config                        # noqa (API import)
from .core.boundingregion import BoundingBox             # noqa (API import)
from .core.dimension import Dimension                    # noqa (API import)
from .core.element import Element, Collator              # noqa (API import)
from .core.layout import (Layout, NdLayout, Empty,       # noqa (API import)
from .core.ndmapping import NdMapping                    # noqa (API import)
from .core.options import (Options, Store, Cycle,        # noqa (API import)
                           Palette, StoreOptions)
from .core.overlay import Overlay, NdOverlay             # noqa (API import)
from .core.spaces import (HoloMap, Callable, DynamicMap, # noqa (API import)
                          GridSpace, GridMatrix)

from .operation import Operation                         # noqa (API import)
from .element import *
from .element import __all__ as elements_list
from .selection import link_selections                   # noqa (API import)
from .util import (extension, renderer, output, opts,    # noqa (API import)
                   render, save)
from .util.transform import dim                          # noqa (API import)
from .util.warnings import HoloviewsDeprecationWarning, HoloviewsUserWarning  # noqa: F401
from .util._versions import show_versions  # noqa: F401

# Suppress warnings generated by NumPy in matplotlib
# Expected to be fixed in next matplotlib release
import warnings
                        message="elementwise comparison failed; returning scalar instead")

if "IPython" in sys.modules:
    from .ipython import notebook_extension
    extension = notebook_extension
    class notebook_extension(param.ParameterizedFunction):
        def __call__(self, *args, **kwargs):
            raise Exception("Jupyter notebook not available: use hv.extension instead.")

if '_pyodide' in sys.modules:
    from .pyodide import in_jupyterlite, pyodide_extension
    # The notebook_extension is needed inside jupyterlite,
    # so the override is only done if we are not inside jupyterlite.
    if in_jupyterlite():
        extension.inline = False
        extension = pyodide_extension
    del pyodide_extension, in_jupyterlite

# A single holoviews.rc file may be executed if found.
for rcfile in [os.environ.get("HOLOVIEWSRC", ''),
                                            '..', 'holoviews.rc')),
    filename = os.path.expanduser(rcfile)
    if os.path.isfile(filename):
        with open(filename, encoding='utf8') as f:
            code = compile(, filename, 'exec')
            except Exception as e:
                print(f"Warning: Could not load {filename!r} [{str(e)!r}]")
        del f, code
    del filename

[docs]def help(obj, visualization=True, ansi=True, backend=None, recursive=False, pattern=None): """ Extended version of the built-in help that supports parameterized functions and objects. A pattern (regular expression) may be used to filter the output and if recursive is set to True, documentation for the supplied object is shown. Note that the recursive option will only work with an object instance and not a class. If ansi is set to False, all ANSI color codes are stripped out. """ backend = backend if backend else Store.current_backend info =, ansi=ansi, backend=backend, visualization=visualization, recursive=recursive, pattern=pattern, elements=elements_list) msg = ("\nTo view the visualization options applicable to this " "object or class, use:\n\n" ", visualization=True)\n\n") if info: print((msg if visualization is False else '') + info) else: import pydoc
def __getattr__(name): if name == "annotate": # Lazy loading Panel from .annotators import annotate return annotate raise AttributeError(f"module {__name__!r} has no attribute {name!r}") del os, rcfile, warnings