【问题标题】:Getting a sample color in matplotlib在 matplotlib 中获取样本颜色
【发布时间】:2017-08-24 18:05:55
【问题描述】:

是否可以通过在 python 中提供原始 RGB 值(或其他颜色图,如 RdYlBu)来了解绘图中的颜色?目前我必须首先使用转换一个浮点数 cm.RdYlBu(x) 并制作一个绘图以查看颜色如何显示。但是有没有一种快速检查颜色的方法?不一定在 python 中,但任何获取值并根据颜色图返回颜色的网站都可以。

【问题讨论】:

    标签: python matplotlib color-mapping


    【解决方案1】:

    在 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
    

    【讨论】:

      【解决方案2】:

      看看the color converter here。它以 RGB 值作为输入。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2014-10-14
        • 2017-03-03
        • 2017-03-18
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多