<?xml version="1.0" encoding="utf-8"?> 
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="en-us">
    <generator uri="https://gohugo.io/" version="0.141.0">Hugo</generator><title type="html"><![CDATA[Color on Blog]]></title>
    
    
    
            <link href="https://blog.scientific-python.org/tags/color/" rel="alternate" type="text/html" title="html" />
            <link href="https://blog.scientific-python.org/tags/color/atom.xml" rel="self" type="application/atom" title="atom" />
    <updated>2026-05-14T22:28:23+00:00</updated>
    
    
    
    
        <id>https://blog.scientific-python.org/tags/color/</id>
    
        
        <entry>
            <title type="html"><![CDATA[PyPalettes: all the colors you'll ever need]]></title>
            <link href="https://blog.scientific-python.org/matplotlib/pypalettes/?utm_source=atom_feed" rel="alternate" type="text/html" />
            
                <link href="https://blog.scientific-python.org/matplotlib/how-to-create-custom-tables/?utm_source=atom_feed" rel="related" type="text/html" title="How to create custom tables" />
                <link href="https://blog.scientific-python.org/matplotlib/unc-biol222/?utm_source=atom_feed" rel="related" type="text/html" title="Art from UNC BIOL222" />
                <link href="https://blog.scientific-python.org/matplotlib/book/?utm_source=atom_feed" rel="related" type="text/html" title="Newly released open access book" />
                <link href="https://blog.scientific-python.org/matplotlib/visualising-usage-using-batteries/?utm_source=atom_feed" rel="related" type="text/html" title="Battery Charts - Visualise usage rates &amp; more" />
                <link href="https://blog.scientific-python.org/matplotlib/gsoc_2021_final/?utm_source=atom_feed" rel="related" type="text/html" title="GSoC&#39;21: Final Report" />
            
                <id>https://blog.scientific-python.org/matplotlib/pypalettes/</id>
            
            
            <published>2025-04-01T00:00:00+00:00</published>
            <updated>2025-04-01T00:00:00+00:00</updated>
            
            
            <content type="html"><![CDATA[<blockquote>Matplotlib is the go-to library for data visualization in Python. While it offers quality built-in colormaps like viridis and inferno, the limited selection can make Matplotlib charts look similar. To address this, I developed pypalettes, a Python library with over 2,500 high-quality, pre-made color palettes, based on Paletteer. The library includes a web app for browsing and previewing all of them.</blockquote><h2 id="finding-the-right-color-has-never-been-easier">Finding the right color has never been easier<a class="headerlink" href="#finding-the-right-color-has-never-been-easier" title="Link to this heading">#</a></h2>
<p><a href="https://github.com/JosephBARBIERDARNAL/pypalettes">PyPalettes</a> is a new Python library designed to simplify the use of color palettes in Python charts.</p>
<p>It provides mainly two things:</p>
<ul>
<li>a <a href="https://github.com/JosephBARBIERDARNAL/pypalettes">super-easy-to-use library</a> that requires only 1 line of code (in 99.99% of cases, 2 otherwise 🙃) to access thousands of pre-defined and attractive palettes.</li>
<li>a <a href="https://python-graph-gallery.com/color-palette-finder/">web app</a> to browse, filter, search, and preview all available palettes (with <strong>bonus</strong>: copy-pastable code to reproduce the charts).</li>
</ul>
<p><a href="https://python-graph-gallery.com/color-palette-finder/"><img src="https://github.com/holtzy/The-Python-Graph-Gallery/raw/master/static/asset/pypalettes.gif" alt="Preview and try all the palettes"></a></p>
<center><i>A small sample of the available palettes</i></center>
<br>
<h2 id="from-r-to-python">From R to Python<a class="headerlink" href="#from-r-to-python" title="Link to this heading">#</a></h2>
<p>In R, there are dozens of packages dedicated to colors for data visualization. Then <a href="https://emilhvitfeldt.github.io/paletteer/">Paletteer</a> came out to <strong>aggregate</strong> every color palette from those packages into a single one, meaning you <strong>only need one package</strong> to access almost all the color palettes people have created!</p>
<p>While re-crafting the <a href="https://python-graph-gallery.com/python-colors/">colors section of the Python Graph Gallery</a>, I started thinking of a way to have a similar tool to Paletteer but for Python.</p>
<center><h3 style="color: lightgray;">That's where PyPalettes comes in.</h3></center>
<p>Paletteer has a community-maintained <a href="https://pmassicotte.github.io/paletteer_gallery/">gallery</a>—a single page showcasing all its color palettes, along with their original sources and names. With the author’s approval, I scraped this gallery to compile the data.</p>
<p>While there may have been other ways to obtain this information, using a short Python script to reproduce the dataset ensures both simplicity and reproducibility (the script scrapes a page stored locally instead of the web page). To make <strong>pypalettes</strong> more comprehensive, I also incorporated all <strong>built-in colors</strong> from <code>Matplotlib</code>.</p>
<p>As a result, I created a dataset containing approximately <strong>2,500 unique palettes</strong>, each with a name, a list of hexadecimal colors, and a source.</p>
<p>At this point, the hardest part was already done. I just had to create a simple API to make them usable in a Python environment and add some additional simple features.</p>
<p>And since <a href="https://www.yan-holtz.com/">Yan</a> supported the idea, he created this amazing <a href="https://python-graph-gallery.com/color-palette-finder/">web app</a>, making it much easier to browse available palettes.</p>
<p>As a thank-you to <code>Paletteer</code>, Yan also created a color finder that features only <code>Paletteer</code> palettes! If you use R, <a href="https://r-graph-gallery.com/color-palette-finder">check it out here</a>.</p>
<br>
<h2 id="how-to-use-pypalettes">How to use pypalettes<a class="headerlink" href="#how-to-use-pypalettes" title="Link to this heading">#</a></h2>
<p>The goal was to make the simplest API possible, and I&rsquo;m quite satisfied with the result. For example, you really like the <a href="https://python-graph-gallery.com/color-palette-finder/?palette=Esox_lucius">&ldquo;Esox lucius&rdquo; palette</a>, and you want to make a chart with it.</p>
<p>First, you import the <code>load_cmap()</code> function (the main function of the library):</p>


<div class="highlight">
  <pre class="chroma"><code><span class="line"><span class="cl"><span class="kn">from</span> <span class="nn">pypalettes</span> <span class="kn">import</span> <span class="n">load_cmap</span></span></span></code></pre>
</div>
<p>And then you just have to call this function with <code>name=&quot;Esox_lucius&quot;</code></p>


<div class="highlight">
  <pre class="chroma"><code><span class="line"><span class="cl"><span class="n">cmap</span> <span class="o">=</span> <span class="n">load_cmap</span><span class="p">(</span><span class="s2">&#34;Esox_lucius&#34;</span><span class="p">)</span></span></span></code></pre>
</div>
<p>The output of <code>load_cmap()</code> is either a <a href="https://matplotlib.org/stable/api/_as_gen/matplotlib.colors.ListedColormap.html">matplotlib.colors.ListedColormap</a> or a <a href="https://matplotlib.org/stable/api/_as_gen/matplotlib.colors.LinearSegmentedColormap.html">matplotlib.colors.LinearSegmentedColormap</a>, depending on the value of the <code>cmap_type</code> argument (default is <code>&quot;discrete&quot;</code>, so it&rsquo;s <code>ListedColormap</code> in this case).</p>
<p>Finally, you can create your chart as you normally would:</p>


<div class="highlight">
  <pre class="chroma"><code><span class="line"><span class="cl"><span class="c1"># load libraries</span>
</span></span><span class="line"><span class="cl"><span class="kn">import</span> <span class="nn">cartopy.crs</span> <span class="k">as</span> <span class="nn">ccrs</span>
</span></span><span class="line"><span class="cl"><span class="kn">import</span> <span class="nn">geopandas</span> <span class="k">as</span> <span class="nn">gpd</span>
</span></span><span class="line"><span class="cl"><span class="kn">import</span> <span class="nn">matplotlib.pyplot</span> <span class="k">as</span> <span class="nn">plt</span>
</span></span><span class="line"><span class="cl"><span class="kn">from</span> <span class="nn">matplotlib.font_manager</span> <span class="kn">import</span> <span class="n">FontProperties</span>
</span></span><span class="line"><span class="cl"><span class="kn">from</span> <span class="nn">highlight_text</span> <span class="kn">import</span> <span class="n">fig_text</span>
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl"><span class="c1"># load font</span>
</span></span><span class="line"><span class="cl"><span class="n">personal_path</span> <span class="o">=</span> <span class="s2">&#34;/Users/josephbarbier/Library/Fonts/&#34;</span>  <span class="c1"># change this to your own path</span>
</span></span><span class="line"><span class="cl"><span class="n">font</span> <span class="o">=</span> <span class="n">FontProperties</span><span class="p">(</span><span class="n">fname</span><span class="o">=</span><span class="n">personal_path</span> <span class="o">+</span> <span class="s2">&#34;FiraSans-Light.ttf&#34;</span><span class="p">)</span>
</span></span><span class="line"><span class="cl"><span class="n">bold_font</span> <span class="o">=</span> <span class="n">FontProperties</span><span class="p">(</span><span class="n">fname</span><span class="o">=</span><span class="n">personal_path</span> <span class="o">+</span> <span class="s2">&#34;FiraSans-Medium.ttf&#34;</span><span class="p">)</span>
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl"><span class="c1"># projection</span>
</span></span><span class="line"><span class="cl"><span class="n">proj</span> <span class="o">=</span> <span class="n">ccrs</span><span class="o">.</span><span class="n">Mercator</span><span class="p">()</span>
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl"><span class="c1"># load the world dataset</span>
</span></span><span class="line"><span class="cl"><span class="n">df</span> <span class="o">=</span> <span class="n">gpd</span><span class="o">.</span><span class="n">read_file</span><span class="p">(</span>
</span></span><span class="line"><span class="cl">    <span class="s2">&#34;https://raw.githubusercontent.com/holtzy/The-Python-Graph-Gallery/master/static/data/all_world.geojson&#34;</span>
</span></span><span class="line"><span class="cl"><span class="p">)</span>
</span></span><span class="line"><span class="cl"><span class="n">df</span> <span class="o">=</span> <span class="n">df</span><span class="p">[</span><span class="o">~</span><span class="n">df</span><span class="p">[</span><span class="s2">&#34;name&#34;</span><span class="p">]</span><span class="o">.</span><span class="n">isin</span><span class="p">([</span><span class="s2">&#34;Antarctica&#34;</span><span class="p">])]</span>
</span></span><span class="line"><span class="cl"><span class="n">df</span> <span class="o">=</span> <span class="n">df</span><span class="o">.</span><span class="n">to_crs</span><span class="p">(</span><span class="n">proj</span><span class="o">.</span><span class="n">proj4_init</span><span class="p">)</span>
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl"><span class="n">fig</span><span class="p">,</span> <span class="n">ax</span> <span class="o">=</span> <span class="n">plt</span><span class="o">.</span><span class="n">subplots</span><span class="p">(</span><span class="n">figsize</span><span class="o">=</span><span class="p">(</span><span class="mi">12</span><span class="p">,</span> <span class="mi">8</span><span class="p">),</span> <span class="n">dpi</span><span class="o">=</span><span class="mi">300</span><span class="p">,</span> <span class="n">subplot_kw</span><span class="o">=</span><span class="p">{</span><span class="s2">&#34;projection&#34;</span><span class="p">:</span> <span class="n">proj</span><span class="p">})</span>
</span></span><span class="line"><span class="cl"><span class="n">ax</span><span class="o">.</span><span class="n">set_axis_off</span><span class="p">()</span>
</span></span><span class="line"><span class="cl"><span class="n">df</span><span class="o">.</span><span class="n">plot</span><span class="p">(</span>
</span></span><span class="line"><span class="cl">    <span class="n">column</span><span class="o">=</span><span class="s2">&#34;name&#34;</span><span class="p">,</span>
</span></span><span class="line"><span class="cl">    <span class="n">ax</span><span class="o">=</span><span class="n">ax</span><span class="p">,</span>
</span></span><span class="line"><span class="cl">    <span class="n">cmap</span><span class="o">=</span><span class="n">cmap</span><span class="p">,</span>  <span class="c1"># here we pass the colormap loaded before</span>
</span></span><span class="line"><span class="cl">    <span class="n">edgecolor</span><span class="o">=</span><span class="s2">&#34;black&#34;</span><span class="p">,</span>
</span></span><span class="line"><span class="cl">    <span class="n">linewidth</span><span class="o">=</span><span class="mf">0.2</span><span class="p">,</span>
</span></span><span class="line"><span class="cl"><span class="p">)</span>
</span></span><span class="line"><span class="cl"><span class="n">fig_text</span><span class="p">(</span>
</span></span><span class="line"><span class="cl">    <span class="n">x</span><span class="o">=</span><span class="mf">0.5</span><span class="p">,</span>
</span></span><span class="line"><span class="cl">    <span class="n">y</span><span class="o">=</span><span class="mf">0.93</span><span class="p">,</span>
</span></span><span class="line"><span class="cl">    <span class="n">s</span><span class="o">=</span><span class="s2">&#34;World map with &lt;PyPalettes&gt; colors&#34;</span><span class="p">,</span>
</span></span><span class="line"><span class="cl">    <span class="n">fontsize</span><span class="o">=</span><span class="mi">25</span><span class="p">,</span>
</span></span><span class="line"><span class="cl">    <span class="n">ha</span><span class="o">=</span><span class="s2">&#34;center&#34;</span><span class="p">,</span>
</span></span><span class="line"><span class="cl">    <span class="n">font</span><span class="o">=</span><span class="n">font</span><span class="p">,</span>
</span></span><span class="line"><span class="cl">    <span class="n">highlight_textprops</span><span class="o">=</span><span class="p">[{</span><span class="s2">&#34;font&#34;</span><span class="p">:</span> <span class="n">bold_font</span><span class="p">}],</span>
</span></span><span class="line"><span class="cl"><span class="p">)</span>
</span></span><span class="line"><span class="cl"><span class="n">fig_text</span><span class="p">(</span>
</span></span><span class="line"><span class="cl">    <span class="n">x</span><span class="o">=</span><span class="mf">0.85</span><span class="p">,</span> <span class="n">y</span><span class="o">=</span><span class="mf">0.14</span><span class="p">,</span> <span class="n">s</span><span class="o">=</span><span class="s2">&#34;Joseph Barbier &amp; Yan Holtz&#34;</span><span class="p">,</span> <span class="n">fontsize</span><span class="o">=</span><span class="mi">8</span><span class="p">,</span> <span class="n">ha</span><span class="o">=</span><span class="s2">&#34;right&#34;</span><span class="p">,</span> <span class="n">font</span><span class="o">=</span><span class="n">font</span>
</span></span><span class="line"><span class="cl"><span class="p">)</span>
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl"><span class="n">plt</span><span class="o">.</span><span class="n">show</span><span class="p">()</span></span></span></code></pre>
</div>
<center>
<p><img src="/matplotlib/pypalettes/map.png" alt=""></p>
</center>
<p>And once the code is working, you can change the color map name and see straight away what it would look like!</p>
<br>
<h2 id="other-usages">Other usages<a class="headerlink" href="#other-usages" title="Link to this heading">#</a></h2>
<p>PyPalettes is primarily designed for <code>matplotlib</code> due to its <strong>high compatibility</strong> with the <code>cmap</code> argument, but one can imagine <strong>much more</strong>.</p>
<p>For example, the output of <code>load_cmap()</code> includes attributes like <code>colors</code> and <code>rgb</code>, which return lists of hexadecimal colors or RGB values. These can be used in <strong>any context</strong>—from Python visualization libraries like Plotly, Plotnine, and Altair to colorimetry, image processing, or any application that requires color!</p>
<br>
<h2 id="learn-more">Learn more<a class="headerlink" href="#learn-more" title="Link to this heading">#</a></h2>
<p>The main links to find out more about this project are as follows:</p>
<ul>
<li>the <a href="https://python-graph-gallery.com/color-palette-finder/">web app</a> to browse the palettes</li>
<li>this <a href="https://python-graph-gallery.com/introduction-to-pypalettes/">introduction to PyPalettes</a> for a more in-depth code explanation</li>
<li>the <a href="https://github.com/JosephBARBIERDARNAL/pypalettes">Github repo</a> with source code and palettes (give us a star! ⭐)</li>
</ul>
]]></content>
            
                 
                    
                 
                    
                         
                        
                            
                             
                                <category scheme="taxonomy:Tags" term="matplotlib" label="matplotlib" />
                             
                                <category scheme="taxonomy:Tags" term="color" label="color" />
                             
                                <category scheme="taxonomy:Tags" term="colormap" label="colormap" />
                            
                        
                    
                
            
        </entry>
    
</feed>
