Получение образца цвета в matplotlib

Можно ли получить представление о том, какой цвет будет отображаться на графике, указав исходное значение RGB (или другие цветовые карты, такие как RdYlBu) в python? В настоящее время мне нужно сначала преобразовать число с плавающей запятой с помощью cm.RdYlBu(x) и построить график, чтобы увидеть, как отображаются цвета. Но есть ли быстрый способ проверить цвет? Не обязательно в Python, но любой веб-сайт, который принимает значение и возвращает цвет в соответствии с цветовой картой, будет в порядке.

3 ответа

Решение

Быстрая проверка в консоли Python

Вы можете использовать сам Python, чтобы быстро показать фигуру с соответствующим цветом из карты цветов matplotlib.

Например, написать функцию

def c(x):
   col = plt.cm.RdYlBu(x)
   fig, ax = plt.subplots(figsize=(1,1))
   fig.set_facecolor(col)
   ax.axis("off")
   plt.show()

а затем позвоните по номеру интереса, например, c(0.4),

Пример того, как это выглядит в консоли jupyter:

Просмотрщик цветовой карты

Конечно, можно также написать программу для просмотра цветных карт с помощью matplotlib. Например:

import sys
import matplotlib.pyplot as plt
import numpy as np
import matplotlib.widgets

class CMViewer():
    def __init__(self, cmap, valinit=0.5):
        self.cmap = plt.get_cmap(cmap)
        col = self.cmap(valinit)
        self.fig, axes = plt.subplots(nrows=4, figsize=(5,3), num=cmap,
                                      gridspec_kw={"height_ratios" : [0.3,1,1,1]})
        self.fig.subplots_adjust(right=0.85)
        self.sliderax, self.cax, self.fax, self.lax = axes

        self.slider = matplotlib.widgets.Slider(self.sliderax, cmap, 0., 1., 
                                                valinit=valinit)
        self.slider.on_changed(self.update)
        self.slider.vline.set_color("k")

        x = np.linspace(0.,1.,256)
        self.cax.imshow(x[np.newaxis, :], cmap=cmap, aspect="auto")
        ta = dict(axis="both", bottom=0, left=0, labelbottom=0, labelleft=0)
        self.cax.tick_params(**ta)
        self.fax.tick_params(**ta)
        self.lax.tick_params(**ta)

        x = np.array([0,0,1,2,2])
        self.lax.imshow(x[np.newaxis, :], cmap="gray", aspect="auto", 
                        extent=[0,1,-0.2,1.2])
        self.lines = []
        for i in range(5):
            line = self.lax.plot([0,1],[i/4.,i/4.], alpha=0.2+i/5., color=col)[0]
            self.lines.append(line)

        self.update(0)
        plt.show()

    def fmtcol(self, col):
        return "{:.3f}  |  {:.3f}  |  {:.3f}".format(*col)

    def update(self, val):
        x = self.slider.val
        col = self.cmap(x)
        self.fax.set_facecolor(col)
        for line in self.lines:
            line.set_color(col)
        self.slider.poly.set_color(col)
        self.slider.vline.set_xdata(x)
        self.lax.set_xlabel(self.fmtcol(col))
        self.fig.canvas.draw_idle()

if __name__ == "__main__":
    if len(sys.argv) > 1:     
        CMViewer(sys.argv[1])
    else:
        CMViewer("RdYlBu")

Если это сохранено как CMViewer.py это может быть запущено как скрипт

> python CMViewer.py 

или с указанной цветовой картой,

> python CMViewer.py viridis

Посмотрите на конвертер цветов здесь. Он принимает значения RGB в качестве входных данных.

В документах matplotlib есть справочное руководство по цветовой карте: https://matplotlib.org/stable/gallery/color/colormap_reference.html.

Вот скриншот для расходящихся цветовых карт, который содержитRdYlBu.

Другие вопросы по тегам