Skip to content

vmagnin/forcolormap

Repository files navigation

ForColormap

This small Fortran colormap fpm library is independent of any graphical toolkit: it just converts a real value to RGB values, that you can use with any toolkit offering bitmap drawing.

It includes a few basic colormaps, plus the Dave Green's cubehelix colormap, plus 62 colormaps of the Scientific colour maps collection v8.0.1 by Fabio Crameri (the discrete palettes were not imported). See Fabio Crameri's poster "Scientific Colour Maps" for more information and my No Bijection! text about the mysteries and wonders of colors.

Basic usage

Assuming your graphical library has a setpixelgb()-like function and z is in the [0, 2] range, you can write something like:

use forcolormap
...
type(Colormap) :: cmap
integer  :: red, green, blue
real(wp) :: z, x, y
...
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)

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.

Note that there is no default colormap as we consider that each user must choose a colormap adapted to the properties of its data.

Installation

Requirements

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.

Testing the project

If you have a GitHub account, just clone the repository and launch the demo example:

$ git clone [email protected]:vmagnin/forcolormap.git
$ cd forcolormap
$ fpm run --example demo

The demo is creating PPM files with colormaps and colorbars for all the available colormaps.

Using ForColormap as a fpm dependency

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" }

TODO / ideas for further developments

  • Create a logo: inspired by Newton/Dark Side of the Moon? Or a rainbow? And using Fortran purple.
  • Improve the documentation.
  • Include a few images in the README.md file.
  • In the Scientific colour maps, the discrete colormaps were not imported for the time being because there is no .lut file.
  • The set() method could have an optional reverse option to reverse the color order in a palette.
  • Colormaps could have an option for logscale.
  • A get_colorbar() function could return an array(:,:,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.

License

This project is under MIT license.

Citing colormaps

References

Articles and books

  • 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.

Web pages

About colormaps

Specific colormaps