# export paraview colormap for pgfplots/tikz integration in LaTeX

**URL:** https://discourse.paraview.org/t/export-paraview-colormap-for-pgfplots-tikz-integration-in-latex/13272
**Category:** Tips and Tricks
**Created:** [November 17, 2023, 10:20am UTC](https://discourse.paraview.org/t/export-paraview-colormap-for-pgfplots-tikz-integration-in-latex/13272 "2023-11-17T10:20:26Z")
**Posts on this page:** 1
**Page:** 1

<div class="post-metadata">

### Author: ![thomas-saigre](https://discourse.paraview.org/letter_avatar_proxy/v4/letter/t/94ad74/32.png) [@thomas-saigre](https://discourse.paraview.org/u/thomas-saigre)
#### Post date: [November 17, 2023, 10:20am UTC](https://discourse.paraview.org/t/export-paraview-colormap-for-pgfplots-tikz-integration-in-latex/13272/1 "2023-11-17T10:20:26Z")

</div>

To allow better handling of the text around the legend of the color bar of an exported figure in a LaTeX document, I chose to export as a PNG only the content of the figure and display manually the colorbar next to it, using pgfplots/tikz.  
Some colormap are already implemented in pgfplots (see e.g. [this page](https://tikz.dev/pgfplots/libs-colormaps)), but it is not the case for all of the ones that are available in ParaView.

So I wrote a small Python script allowing to convert the content of a JSON file containing the information about the colormap and convert it to a string that is to be inserted in the options of the `axis` environment.

Such JSON file can be obtained with the button `Save to preset` in ParaView, the resulting file looks like [that](https://github.com/Kitware/ParaView/blob/dbda1f9739c56d961cca4bffd4f7aef211a6a501/Remoting/Views/ColorMaps.json#L3212-L3396).

Here is the Python code :

```py
import json

def convert_rgb(l):
    return [int(l[0]*255), int(l[1]*255), int(l[2]*255)]

def colormap_to_tikz(colormap):
    output = "{" + colormap["Name"] + "}{\n"
    list = colormap["RGBPoints"]

    for i in range(int(len(list)/4)):
        coord = list[i*4]
        newcolor = convert_rgb(list[i*4+1:i*4+4])
        output += f" rgb255({coord}cm)=({newcolor[0]},{newcolor[1]},{newcolor[2]});\n"
    output += "}\n"
    return output

f = open('rainbow.json') # path to the JSON file
j = json.load(f)
f.close()
cm = j[0] # or if the file contains the description of many color maps, change the index

result = open("rainbow.txt", "w")
result.write(colormap_to_tikz(cm))
result.close()

```

For instance, with the colormap `Rainbow Uniform`, it will result in the following output :

```txt
{Rainbow Uniform}{
    rgb255(0.0cm)=(5,97,254);
    rgb255(0.023809523809523808cm)=(5,108,247);
    rgb255(0.047619047619047616cm)=(5,119,239);
    rgb255(0.07142857142857142cm)=(5,130,232);
    rgb255(0.09523809523809523cm)=(5,139,222);
    rgb255(0.11904761904761904cm)=(5,148,212);
    rgb255(0.14285714285714285cm)=(5,157,202);
    rgb255(0.16666666666666666cm)=(5,166,191);
    rgb255(0.19047619047619047cm)=(5,174,179);
    rgb255(0.21428571428571427cm)=(5,183,167);
    rgb255(0.23809523809523808cm)=(5,193,153);
    rgb255(0.2619047619047619cm)=(5,202,140);
    rgb255(0.2857142857142857cm)=(5,211,126);
    rgb255(0.30952380952380953cm)=(5,220,109);
    rgb255(0.3333333333333333cm)=(5,228,91);
    rgb255(0.35714285714285715cm)=(4,237,74);
    rgb255(0.38095238095238093cm)=(69,242,39);
    rgb255(0.40476190476190477cm)=(125,245,28);
    rgb255(0.42857142857142855cm)=(164,249,11);
    rgb255(0.4523809523809524cm)=(194,251,8);
    rgb255(0.47619047619047616cm)=(224,252,5);
    rgb255(0.5cm)=(254,254,3);
    rgb255(0.5238095238095238cm)=(254,243,20);
    rgb255(0.5476190476190477cm)=(254,232,37);
    rgb255(0.5714285714285714cm)=(254,220,55);
    rgb255(0.5952380952380952cm)=(254,208,55);
    rgb255(0.6190476190476191cm)=(254,196,55);
    rgb255(0.6428571428571429cm)=(254,183,55);
    rgb255(0.6666666666666666cm)=(254,171,55);
    rgb255(0.6904761904761905cm)=(254,159,55);
    rgb255(0.7142857142857143cm)=(254,147,55);
    rgb255(0.7380952380952381cm)=(254,132,55);
    rgb255(0.7619047619047619cm)=(254,118,55);
    rgb255(0.7857142857142857cm)=(254,104,55);
    rgb255(0.8095238095238095cm)=(253,84,53);
    rgb255(0.8333333333333334cm)=(251,66,48);
    rgb255(0.8571428571428571cm)=(252,37,53);
    rgb255(0.8809523809523809cm)=(242,29,64);
    rgb255(0.9047619047619048cm)=(230,20,74);
    rgb255(0.9285714285714286cm)=(218,10,84);
    rgb255(0.9523809523809523cm)=(203,11,91);
    rgb255(0.9761904761904762cm)=(189,11,98);
    rgb255(1.0cm)=(174,12,105);
}

```

Finally, the LaTeX code to insert in the document is the following :

```latex
\begin{tikzpicture}
    \begin{axis}[
        colorbar,
                 % insert here the result of the Python script, for clarity I did not insert the full result here
        colormap={Rainbow Uniform}{rgb255(0.0cm)=(5,97,254);rgb255(1.0cm)=(174,12,105);}

        % axis equal image,
        enlargelimits=false,
        point meta max=10, % minimal value taken
        point meta min=0, % maximal value taken
        axis line style = {draw=none},
        tick style = {draw=none},
        xtick = \empty, ytick = \empty,
        colorbar style={
            ylabel = {label of the colorbar},
        },
    ]
        \addplot graphics [includegraphics cmd=\pgfimage, xmin=0, xmax=1, ymin=0, ymax=1] {path/to/the/exported/figure.png};
    \end{axis}
\end{tikzpicture}

```

From Paraview, you should get the minimal and maximal values of the field to update `point meta min` and `point meta max`.

I hope this will be useful for others in the future 🙂
