Skip to main content
 首页 » 编程设计

python之堆叠色图

2025年05月04日10sharpest

有没有一种简单的方法可以通过将两个现有的颜色图叠加在一起来形成新的颜色图?

我想要实现的是制作另一个颜色编码的散点图,其中颜色映射变量从大的负值到大的正值变化,我想调低零附近的值 - - 基本上,我希望能够从库存颜色图(例如,cm.Blues_r)中为颜色映射变量的负值选择颜色,并从不同的颜色图(例如,cm.Oranges) 表示该变量的正值。

请您参考如下方法:

这没有经过测试,但作为第一步,我会尝试创建一个简单的 colors.Colormap 子类。

class split_cmap(colors.Colormap): 
    def __init__(self, cmap_a, cmap_b, split=.5): 
        '''Makes a split color map cmap_a is the low range,  
           cmap_b is the high range 
           split is where to break the range 
        ''' 
        self.cmap_a, self.cmap_b = cmap_a, cmap_b 
        self.split = split 
 
    def __call__(self, v): 
        if v < self.split: 
            return self.cmap_a(v)  
            # or you might want to use v / self.split 
        else: 
            return self.cmap_b(v)  
            # or you might want to use (v - self.split) / (1 - self.split) 
 
    def set_bad(self,*args, **kwargs): 
        self.cmap_a.set_bad(*args, **kwargs) 
        self.cmap_b.set_bad(*args, **kwargs) 
 
    def set_over(self, *args, **kwargs): 
        self.cmap_a.set_over(*args, **kwargs) # not really needed 
        self.cmap_b.set_over(*args, **kwargs) 
 
    def set_under(self, *args, **kwargs): 
        self.cmap_a.set_under(*args, **kwargs) 
        self.cmap_b.set_under(*args, **kwargs) # not really needed 
 
    def is_gray(self): 
        return False 

colors.Colormap class definition .

您还需要深入研究Normalize 类。颜色映射只知道 [0, 1],所以你必须确保你的 norm 映射到你想要的 .5改变即将发生。

您可以将其概括为获取 map 和分割点的列表,并拥有任意数量的彩色 map 。这也需要各种方式的完整性检查。

如果您重新规范化输入,您还可以通过将颜色图及其反向伙伴传递给它来制作任何现有颜色图的周期版本。