【发布时间】:2017-08-24 18:05:55
【问题描述】:
是否可以通过在 python 中提供原始 RGB 值(或其他颜色图,如 RdYlBu)来了解绘图中的颜色?目前我必须首先使用转换一个浮点数 cm.RdYlBu(x) 并制作一个绘图以查看颜色如何显示。但是有没有一种快速检查颜色的方法?不一定在 python 中,但任何获取值并根据颜色图返回颜色的网站都可以。
【问题讨论】:
标签: python matplotlib color-mapping
是否可以通过在 python 中提供原始 RGB 值(或其他颜色图,如 RdYlBu)来了解绘图中的颜色?目前我必须首先使用转换一个浮点数 cm.RdYlBu(x) 并制作一个绘图以查看颜色如何显示。但是有没有一种快速检查颜色的方法?不一定在 python 中,但任何获取值并根据颜色图返回颜色的网站都可以。
【问题讨论】:
标签: python matplotlib color-mapping
您可以使用 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
【讨论】:
看看the color converter here。它以 RGB 值作为输入。
【讨论】: