This Fortran fpm library is independent of any graphical toolkit: its main functionnality is converting a real value to RGB values, that you can use with any toolkit offering bitmap drawing. And it offers various methods and options to manage colormaps.
It includes:
- a few basic colormaps: "grey", "fire", "rainbow", "inverted_rainbow", "zebra",
- the Dave Green's cubehelix colormap,
- the "magma", "inferno","plasma", "viridis" matplotlib colormaps,
- the 222 colormaps of the Scientific colour maps collection v8.0.1 by Fabio Crameri. See Fabio Crameri's poster "Scientific Colour Maps" for more information and my No Bijection! text about the mysteries and wonders of colors.
Note that there is no default colormap as we consider that the user must choose a colormap adapted to the properties of its data. This guideline can help you choosing the right kind of colormap.
Assuming your graphical library has a setpixelgb()
-like function and you know your z
values will be in the [0, 2] range, you can write something like:
use forcolormap, only: Colormap, colormaps_list, wp
...
type(Colormap) :: cmap
integer :: red, green, blue
real(wp) :: z, x, y
...
! Let's use the glasgow colormap:
call cmap%set("glasgow", 0.0_wp, 2.0_wp)
...
z = f(x,y)
call cmap%compute_RGB(z, red, green, blue)
call setpixelrgb(x, y, red, green, blue)
The library is using the precision wp=>real64
defined in the module iso_fortran_env
.
Look into the example/demo.f90
file for more usage examples: you can create your own colormap, download a colormap from a text file, etc. The example/demo_reverse.f90
file shows how to use the reverse
option to reverse the direction of a colormap.
You need:
- a modern Fortran compiler, for example GFortran or the Intel ifort/ifx compilers. See the Fortran-lang.org compilers page for other compilers.
- The Fortran Package Manager fpm.
- For writing PPM files, the library ForImage is used as a fpm dependency.
- Any operating system.
If you have a GitHub account, just clone the repository and launch the demo example, which is creating PPM files with colormaps and colorbars for all the available colormaps:
$ git clone [email protected]:vmagnin/forcolormap.git
$ cd forcolormap
$ fpm run --example demo
Other examples/demos are available:
demo_reverse.f90
demonstrates the usage of thereverse=.true.
option to reverse the direction of a colormap.example1.f90
demonstrates how ForImage can be used to import/export PPM files.extract.f90
demonstrates how to create a specific colormap by extracting a specified number of colors of a colormap.info.f90
demonstrates how to obtain information about a colormap using theColormaps_info
class.
To use ForColormap within your own fpm
project, add the following lines to your fpm.toml
manifest file:
[dependencies]
forcolormap = {git = "https://github.com/vmagnin/forcolormap.git" }
- Create a logo: a colored marble?
- Improve the documentation.
- Include a few images in the README.md file.
- Which colormaps are colorblind friendly, perceptually uniform, B&W print safe, etc.
- Add in
src/colormaps_info.f90
andCOLORMAPS_LIST.md
the Matplotlib and miscellaneous colormaps.
- Colormaps could have an option for logscale.
- A
get_colorbar()
function could return anarray(:,:,1:3)
containing the RGB image of the colorbar. The arguments could be the width and height, the direction (horizontal/vertical), etc. - A
save()
method could save a colormap as RGB values separated by spaces in a.lut
text file. - Adding functions to create colormaps, for example defined by their two extremes colors:
create_linear(color1, color2)
.
This project is under MIT license.
- For Scientific colour maps, please cite these two items:
- Crameri, F. (2018a), Scientific colour maps. Zenodo. https://doi.org/10.5281/zenodo.1243862
- Crameri, Fabio, Grace E. Shephard, and Philip J. Heron. “The Misuse of Colour in Science Communication.” Nature Communications 11, no. 1 (October 28, 2020): 5444. https://doi.org/10.1038/s41467-020-19160-7.
- For the matplotlib colormaps, you can cite this webpage https://bids.github.io/colormap/
- For the cubehelix colormap, please cite:
- Green, D. A. “A Colour Scheme for the Display of Astronomical Intensity Images.” arXiv, August 30, 2011. https://arxiv.org/abs/1108.5083.
- Nuñez, Jamie R., Christopher R. Anderton, and Ryan S. Renslow. “Optimizing Colormaps with Consideration for Color Vision Deficiency to Enable Accurate Interpretation of Scientific Data.” Edited by Jesús Malo. PLOS ONE 13, no. 7 (August 1, 2018): e0199239. https://doi.org/10.1371/journal.pone.0199239.
- Rogowitz, Bernice E, and Lloyd A Treinish. “Why Should Engineers and Scientists Be Worried About Color?”
- Thyng, Kristen, Chad Greene, Robert Hetland, Heather Zimmerle, and Steven DiMarco. “True Colors of Oceanography: Guidelines for Effective and Accurate Colormap Selection.” Oceanography 29, no. 3 (September 1, 2016): 9–13. https://doi.org/10.5670/oceanog.2016.66.
- Valeur, Bernard. La couleur dans tous ses éclats. Bibliothèque scientifique. Paris: Belin-"Pour la science", 2011, ISBN 9782701158761.
- Valeur, Bernard. Lumière et luminescence - Ces phénomènes lumineux qui nous entourent. Bibliothèque scientifique. Paris: Belin-"Pour la science", 2005, ISBN 9782701136035.
- https://en.wikipedia.org/wiki/Color_gradient
- https://en.wikipedia.org/wiki/Heat_map
- Ken Hughes, "Default colormaps: Are Parula and Viridis really an improvement over Jet?", posted on October 1, 2019.
- "In Search of a Perfect Colormap", https://inversed.ru/Blog_2.htm
- Cubehelix (Dave Green, public domain):
- Scientific colour maps (Fabio Crameri, MIT license):
- https://www.fabiocrameri.ch/colourmaps/
- https://s-ink.org/colour-map-guideline
- https://s-ink.org/scientific-colour-maps
- Seminar talk by Fabio Crameri about the scientific use of colour in science communication for the University of Oslo GeoHyd seminar: https://www.youtube.com/watch?v=iDPzWARbFrs
- Matplotlib colormaps (CC0 license / public domain):
- https://bids.github.io/colormap/
- Python version: https://github.com/BIDS/colormap/blob/master/colormaps.py
- Nathaniel Smith and Stéfan van der Walt, A Better Default Colormap for Matplotlib, SciPy 2015: https://www.youtube.com/watch?v=xAoljeRJ3lU
- Colors for data scientists. Generate and refine palettes of optimally distinct colors.