Comparisons
Comparisons with other Python-based visualization packages
Bokeh is one of many Python-based packages developed to support data visualization, each of which has its strengths, weaknesses, and intended uses. Most if not all of these packages are intended to work to varying degrees with other foundational elements of the Python data science ecosystem, such as NumPy, SciPy, Pandas, and Jupyter. Below we provide comparisons with some of these other packages, to help you determine if Bokeh is something you would like to work with.
Bokeh provides support for most standard types of two-dimensional (2D) data visualizations, such as line plots, bar charts, scatter plots, area plots, and image plots. If one is working with a higher-dimensional data set, Bokeh provides support for using additional data fields to impact aspects of the plotting, such as using color or marker size to represent those additional fields, or to discover additional information by hovering over data elements. Bokeh, along with most of the packages listed below, are not focused on providing support for three-dimensional (3D) data visualizations of 3D objects, such as might arise in fluid dynamics, solid mechanics, or anatomy. If you are primarily working with data of that type, you might want to consider some of the packages listed at the bottom of this page.
Matplotlib
No discussion of data visualization in Python would be complete without Matplotlib, the workhorse of Python plotting. Matplotlib provides two different plotting APIs geared mostly towards making static figures, such as would be used in a publication, presentation, or report. The plotting APIs provide fine-grained control of all the various aspects of a figure, including how the data are represented as well as auxiliary elements such as axis labels, tick marks, legends, etc. Because of the somewhat low level of abstraction provided by the Matplotlib package, other packages (such as Pandas and Seaborn, below) use Matplotlib as an underlying plotting engine but also provide higher levels of abstraction for some common types of visualizations. Although Matplotlib bills itself as "a comprehensive library for creating static, animated, and interactive visualizations in Python", its support for interactivity (mainly zooming, panning, and updating) is limited compared to what is provided by Bokeh. If your focus is on producing static figures, and you don't require interactivity for exploratory data analysis or data manipulation, then Matplotlib (as well as other packages that leverage matplotlib as a plotting engine) is an obvious choice. That being said, the conceptual organization of the plotting APIs in the Matplotlib and Bokeh packages are similar.
Pandas, Seaborn and domain-specific application tools
Pandas and Seaborn use the Matplotlib package for generating plots, but do so to support particular contexts and use cases. Pandas provides powerful datatypes to represent DataFrames (i.e., tabular data) and Series (i.e., individual columns of data tables), and uses the Matplotlib API to implement plotting methods on these objects. Because DataFrames and Series contain other information beyond just the numeric values in the tables (e.g., column labels), Pandas can use that information as part of its plotting repertoire (e.g., to create legends, or to support plotting via column name). Seaborn is focused on representation of statistical quantities, using Matplotlib underneath in order to represent various properties of statistical distributions and high-dimensional datasets.
Because both Pandas and Seaborn use Matplotlib to actually create their plots, one can easily interleave calls to the Pandas and/or Seaborn APIs with calls to the matplotlib API. This is especially useful to leverage the high-level support for plot creation provided by Pandas and Seaborn with the fine-grained customization provided by Matplotlib.
Various domain-specific application tools also make use of Matplotlib as a low-level plotting engine. This includes Scikit-learn, a Python package for machine learning that provides support for visualizations of various quantities of interest, and NetworkX, a Python package for creating and analyzing networks and graphs. Bokeh also provides functionality for interfacing with NetworkX in order to display networks.
Plotly
Plotly is a plotting library with similar aims and functionality as that provided by Bokeh, supporting interactive web-based visualization interactive applications. Plotly Express is a convenient interface to the Plotly plotting library, and Dash is a companion framework that supports the development of rich Plotly-driven visualization applications and dashboards, similar to the role played by Bokeh server. Compared to Bokeh, Plotly contains more built-in analytics that can be used to drive visualization, as well as more plotting types, but Bokeh continues to develop additional functionality along those lines.
Vega-Altair
Vega-Altair is a declarative visualization library for Python, built on top of the Vega-Lite grammar. Like Bokeh and Plotly, Vega-Altair provides support interactive data visualization in a web browser.
Panel
Panel is a framework for creating data visualization applications and dashboards, built on top of some of the Bokeh infrastructure, but with the ability to use a variety of different engines for plotting (including, but not restricted to, Bokeh).
Plotnine
Plotnine is a Python implementation of the "grammar of graphics" based on ggplot2 from R. If you know ggplot2 and want to do something similar in Python, you might want to look into Plotnine.
VTK, ParaView, etc. for 3D data visualization
Most of the packages listed on this page, including Bokeh, are focused on making 2D plots, potentially by folding in additional information from higher-dimensional datasets through the use of variations in color, glyph size, etc. In contrast, some applications involve the analysis and visualization of 3D objects and fields embedded in 3D, such as in the fields of solid mechanics, fluid dynamics, and biomedical imaging. Visualizing these sorts of datasets is intrinsically more complicated than in the 2D case, since one needs to address issues such as: opacity and transparency, rotation and zooming, representation of complex 3D geometries, overlaying data fields on 3D geometries, and the construction of complex data processing pipelines. For visualization problems of this sort, the VTK library is widely used both on its own and as a 3D rendering engine called by other libraries and applications, such as ParaView. VTK is written in C++, but provides a powerful Python-language API which can be used to program visualizations. In addition, the ParaView application supports scripting of data visualization pipelines using that API, as a complement to its custom Graphical User Interface (GUI) that can be used to construct pipelines. If you are interested in learning more, you can consult our companion roadmaps on ParaView and ParaView - Advanced.