Have you ever wondered, "I wish I had more color maps (or color cycles)" when drawing with matplotlib?
Here, we will introduce a convenient extension library that solves such problems.
That is ** palettetable **. There are ** 1599 ** color maps available.
There are 79 standard color maps for matplotlib, so it's ** about 20 times ** !!.
The color map of matplotlib can be edited and created by yourself in various ways, so it can be said that you do not actually need to rely on the extension library. palettable is just an archive of the many colormaps created in this way.
So, this article is for ** "I want to use more colormaps, but it's a pain to research and create by myself. If you have an easy-to-use extension library, use it!" ** ..
The list of color maps for palettable is summarized in the article ** here ** (I have separated it because there are too many).
The original HP (English) is here.
It can be easily installed with the pip command.
pip install palettable
matplotlib follows the default color cycle when drawing plots. For example, like this, by default, 10 pieces go around and the 11th piece returns to the original color.
import numpy as np
import matplotlib.pyplot as plt
x = np.linspace(0, 2*np.pi, 100)
fig, ax = plt.subplots()
for i in range(11):
y = np.sin(x)+i
ax.plot(x, y)
plt.show()
The color cycle used at this time was the default tab10 in matplotlib:
Now let's change this to a palettable color cycle. This time, I will use palettable.scientific.sequential.Tokyo_10. The color cycle for palettable is palette.scientific.sequential.Tokyo_10.mpl_colors
You can get it (just add .mpl_colors to the end).

To change the color cycle, use ʻax.set_prop_cycle () `:
import numpy as np
import matplotlib.pyplot as plt
import palettable #add to
x = np.linspace(0, 2*np.pi, 100)
fig, ax = plt.subplots()
#Add the following line
ax.set_prop_cycle('color', palettable.scientific.sequential.Tokyo_10.mpl_colors)
for i in range(11):
y = np.sin(x)+i
ax.plot(x, y)
plt.show()
The result is like this. It has a specified color cycle, and it goes around with 10 pieces.

Here, the palettable.scientific.sequential.Tokyo_10.mpl_colors passed to ʻax.set_prop_cycle ()is just a Pythonlist` object.
Contents is like this. It's a standardized 10-by-3 RGB array:
>>> palettable.scientific.sequential.Tokyo_10.mpl_colors
[(0.10196078431372549, 0.054901960784313725, 0.20392156862745098),
(0.27058823529411763, 0.12549019607843137, 0.2980392156862745),
(0.43137254901960786, 0.24313725490196078, 0.403921568627451),
(0.5215686274509804, 0.3686274509803922, 0.47058823529411764),
(0.5529411764705883, 0.4745098039215686, 0.5098039215686274),
(0.5725490196078431, 0.5803921568627451, 0.5372549019607843),
(0.592156862745098, 0.6823529411764706, 0.5686274509803921),
(0.6549019607843137, 0.807843137254902, 0.615686274509804),
(0.8352941176470589, 0.9490196078431372, 0.7372549019607844),
(0.996078431372549, 0.996078431372549, 0.8470588235294118)]
In addition, the number of rounds is determined by the last number of palettable.scientific.sequential.Tokyo_10, and the number that can be specified depends on the color code. For example, in palettable.scientific.sequential.Tokyo_, you can specify from 3 to 20.
For example, if you use palettable.scientific.sequential.Tokyo_11 to go around with 11 pieces, it will be as follows:
I went around with just 11 pieces.
It's finally a color map. Actually, this one is easier to use. First, let's make a two-dimensional plot with a simple sample code.
import numpy as np
import matplotlib.pyplot as plt
xx, yy = np.meshgrid(np.linspace(0, 2*np.pi, 100), np.linspace(0, 2*np.pi, 100))
zz = np.sin(xx+yy)
fig, ax = plt.subplots()
mp = ax.imshow(zz, cmap="Blues") #Specify the colormap on this line
fig.colorbar(mp)
Now, let's change this color map to the same palettable.scientific.sequential.Tokyo_10 as before.
The color map for palettable is palette.scientific.sequential.Tokyo_10.mpl_colormap
You can get it (just add .mpl_colormap to the end).
import numpy as np
import matplotlib.pyplot as plt
import palettable #add to
xx, yy = np.meshgrid(np.linspace(0, 2*np.pi, 100), np.linspace(0, 2*np.pi, 100))
zz = np.sin(xx+yy)
fig, ax = plt.subplots()
#Change the cmap option on the next line
mp = ax.imshow(zz, cmap=palettable.scientific.sequential.Tokyo_10.mpl_colormap)
fig.colorbar(mp)
The atmosphere looks quite different.
The content of palettable.scientific.sequential.Tokyo_10.mpl_colormap given to the cmap option is the LinearSegmentedColormap object of matplotlib.colors:
>>> palettable.scientific.sequential.Tokyo_10.mpl_colormap
<matplotlib.colors.LinearSegmentedColormap at 0x7fb05793f0d0>
Also, when using the palettable color map, it represents the color resolution in the same way as the last number (_10 part) that indicates the number of color cycles. Let's try comparing _3 and _20:
The appearance will change considerably. It is a good idea to change the color resolution according to the fluctuation range you want to express.
The palettable color map list is summarized in the article ** here **. Thank you for reading until the end.