Получение образца цвета в 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
.