Afficher une colorbar avec TikZ

Etant souvent insatisfait des échelles de couleurs (colorbars) des logiciels de visualisation, j’ai pris l’habitude de les faire directement sous LaTeX grâce à Pgfplots.

Intérêts de l’opération

L’intérêt est de s’assurer la lisibilité de la colorbar. De plus, on s’assure de la cohérence de la police utilisée avec le corps du document. Et enfin, on a un rendu 100 % vectoriel !

Exemple

Voici donc l’objectif de ce billet :

Colormap 'jet'

Code

\newcommand{\colorbar}[3][jet]{
     \begin{tikzpicture}
    \pgfmathsetmacro{\nsamp}{11};
    \pgfmathsetmacro{\step}{#2+(#3-#2)/(\nsamp-1)};
         \begin{axis}[
	         xmin=0,xmax=1,
	         ymin=0,ymax=1,
             hide axis,
             scale only axis,
             height=0pt,
             width=0pt,
             colormap/#1,
             colorbar sampled,
             colorbar,
             point meta min=#2,
             point meta max=#3,
             colorbar style={
                 scaled y ticks = false,
                 tick label style={/pgf/number format/fixed},
                 samples=\nsamp,
                 height=5cm,
                 ytick={#2,\step,...,#3},
                 /pgf/number format/precision=3
             }]
         \end{axis}
     \end{tikzpicture}
}

Utilisation

La macro colorbar s’utilise comme suit :

\colorbar{<valeur min>}{<valeur max}

Par défaut, c’est la colormap jet qui est utilisée. Pgfplots en fournit beaucoup d’autres (voir section 4.7.6 p. 192 du manuel de Pgfplots). Pour choisir une autre colormap :

\colorbar[<colormap>]{<valeur min>}{<valeur max}

Définition de nouvelles colormaps

Il existe presque autant de colormaps différentes que de logiciels de visualisation. Donc si vous ne trouvez pas votre bonheur dans celles proposées par défaut, libre à vous de définir les vôtres.

Exemple pour les échelles de Abaqus et du logiciel GLview (utilisé par exemple pour le code EF Forge) :

\pgfplotsset{
	colormap/abaqus/.style={
    		colormap={abaqus}{
			rgb255(0cm)=(0,0,255)
			rgb255(1cm)=(0,255,255)
			rgb255(2cm)=(0,255,0)
			rgb255(3cm)=(255,255,0)
			rgb255(4cm)=(255,0,0)
    		},
	},
	colormap/forge/.style={
		colormap={forge}{
			rgb255(0cm)=(0,0,255)
			rgb255(1cm)=(0,0,255)
			rgb255(3cm)=(0,255,255)
			rgb255(5cm)=(255,255,0)
			rgb255(8cm)=(255,0,0)
		}, 
   	},
}

Avec

\colorbar[forge]{0}{100}
\colorbar[abaqus]{0}{100}

on obtient donc :

(ne me demandez pas pourquoi il y a un doublon pour GLview, moi non plus j’ai pas compris).

Si vous voulez créer votre propre colormap, le plus simple est de relever les valeurs RVB depuis un logiciel de traitement d’image quelconque (ex : outil pipette dans Gimp).