.. _external_links:

==============
External links
==============

This page contains links to related external projects.

Python packages
===============

The following packages inspired UltraPlot, are required or optional
dependencies of UltraPlot, or are distributed with UltraPlot:

* `matplotlib <https://matplotlib.org>`__ - The powerful data visualization
  package we all know and love.
* `xarray <http://xarray.pydata.org/en/stable/api.html>`__ - A package for working with
  annotated ND numpy arrays. If you haven't heard of it and you work with NetCDF files,
  it will change your life.
* `pandas <https://pandas.pydata.org>`__ - A package that turns spreadsheets and
  tables into annotated 2D numpy arrays. Invaluable for many types of datasets.
* `pint <https://github.com/hgrecco/pint>`__ - A package for tracking and
  converting between physical units during mathematical operations and when
  plotting in matplotlib axes.
* `cartopy <https://cartopy.readthedocs.io/stable/>`__ - A package for
  plotting geographic and geophysical data in matplotlib. Includes a suite of
  different map projections.
* `basemap <https://github.com/matplotlib/basemap>`__ - The original cartographic
  plotting package. Basemap is less closely integrated with matplotlib than
  cartopy but still quite popular. As of 2020 it is no longer actively maintained.
* `seaborn <https://seaborn.pydata.org>`__ - A statistical data visualization package.
  Seaborn is based on matplotlib but its interface is mostly separate from matplotlib.
  It is not generally suitable for geophysical data.
* `hsluv-python <https://github.com/hsluv/hsluv-python/blob/master/hsluv.py>`__ -
  A python implementation of `HSLuv <https://www.hsluv.org>`__ used for
  the hue, saturation, luminance math required by :class:`~ultraplot.colors.PerceptualColormap`.
* `TeX Gyre <https://ctan.org/pkg/tex-gyre?lang=en>`__ -
  An open source re-implementation of popular fonts like
  `Helvetica <https://en.wikipedia.org/wiki/Helvetica>`__
  and `Century <https://en.wikipedia.org/wiki/Century_type_family>`__.
  These are distributed with UltraPlot and used for its default font families.
* `Fira Math <https://en.wikipedia.org/wiki/Century_type_family>`__ -
  An open source sans-serif font with a zillion glyphs for mathematical symbols.
  This is distributed with UltraPlot as a viable alternative to
  `DejaVu Sans <https://en.wikipedia.org/wiki/DejaVu_fonts>`__.

Downloadable colormaps
======================

The following colormap repositories are
imported and registered by UltraPlot.

* `Color Brewer <http://colorbrewer2.org/#type=sequential&scheme=BuGn&n=3>`__ - The
  O.G. perceptually uniform colormap distribution. These are included with
  matplotlib by default.
* `cmOcean <https://matplotlib.org/cmocean/>`__ - Perceptually uniform colormaps
  designed for oceanography, but suitable for plenty of other applications.
* `SciVisColor <https://sciviscolor.org/>`__ - Science-focused colormaps created by the
  viz team at UT Austin. Provides tools for concatenating colormaps, suitable for
  complex datasets with funky distributions.
* `Fabio Crameri <http://www.fabiocrameri.ch/colourmaps.php>`__ - Perceptually
  uniform colormaps for geoscientists. These maps have unusual and interesting
  color transitions.

..
  * `Cube Helix <https://ui.adsabs.harvard.edu/abs/2011BASI...39..289G/abstract>`__ - A
    series of colormaps generated by rotating through RGB channel values. The colormaps
    were added from `Palletable <https://jiffyclub.github.io/palettable/cubehelix/>`__.

Tools for making new colormaps
==============================

Use these resources to make colormaps from scratch. Then import
them into UltraPlot by adding files to the ``.UltraPlot/cmaps`` folder
(see :ref:`this section <ug_cmaps_dl>` for details).

* `The UltraPlot API <https://ultraplot.readthedocs.io/en/latest/colormaps.html#Making-new-colormaps>`__ -
  Namely, the :class:`~ultraplot.colors.ContinuousColormap` class and
  :class:`~ultraplot.constructor.Colormap` constructor function.
* `HCL Wizard <http://hclwizard.org:64230/hclwizard/>`__ -
  An advanced interface for designing perceptually uniform colormaps,
  with example plots, channel plots, and lots of sliders.
* `SciVisColor <https://sciviscolor.org/home/colormoves/>`__ -
  An advanced interface for concatenating segments from a suite of colormap
  presets. Useful for datasets with complex statistical distributions.
* `CCC-tool <http://vrl.cs.brown.edu/color>`__ -
  An advanced interface for designing, analyzing, and concatenating colormaps,
  leaning on the `SciViscolor <https://sciviscolor.org/home/colormoves/>`__ presets.
* `HCL Picker <http://tristen.ca/hcl-picker/#/hlc/6/1/15534C/E2E062>`__ -
  A simple interface for taking cross-sections of the HCL colorspace.
  Resembles the examples :ref:`shown here <ug_perceptual>`.
* `Chroma.js <https://gka.github.io/palettes/>`__ -
  A simple interface for Bezier interpolating between lists of colors,
  with adjustable hue, chroma, and luminance channels.

Tools for making new color cycles
=================================

Use these resources to make color cycles from scratch. Then import
them into UltraPlot by adding files to the ``.UltraPlot/cycles`` folder
(see :ref:`this section <ug_cycles_dl>` for details).

* `The UltraPlot API <https://ultraplot.readthedocs.io/en/latest/cycles.html#Making-new-color-cycles>`__ -
  Namely, the :class:`~ultraplot.colors.DiscreteColormap` class and
  :class:`~ultraplot.constructor.Cycle` constructor function.
* `i want hue <http://medialab.github.io/iwanthue/>`__ -
  An advanced interface for generating perceptually distinct color sets
  with options for restricting the hue, chroma, and luminance ranges.
* `Color Cycle Picker <https://colorcyclepicker.mpetroff.net/>`__ -
  An advanced interface for generating perceptually distinct color sets
  based on seed colors, with colorblind-friendliness measures included.
* `Colorgorical <http://vrl.cs.brown.edu/color>`__ -
  An advanced interface for making perceptually distinct colors sets
  with both seed color and channel restriction options.
* `Adobe Color <https://color.adobe.com/explore>`__ - A simple interface
  for selecting color sets derived from sample images, including an option
  to upload images and a searchable image database.
* `Color Hunt <https://colorhunt.co/>`__ - A simple interface for selecting
  preset color sets voted on by users and grouped into stylistic categories
  like "summer" and "winter".
* `Coolors <https://coolors.co/>`__ - A simple interface for building
  randomly-generated aesthetically-pleasing color sets that are not
  necessarily uniformly perceptually distinct.
* `Color Drop <https://colordrop.io/>`__ - A simple interface
  for selecting preset color sets voted on by users.
