2012-01-05 75 views
2

我目前有一大组色彩映射,我用其他语言使用,我想导入python以用于matplotlib。我能三列的ASCII文件转换为RGB排列,然后到颜色表像这样:永久注册matplotlib中的色彩地图

def from_ascii(filename, name): 
    palette = open(filename) 
    lines = palette.readlines() 
    carray = np.zeros([len(lines), 3]) 
    for num, line in enumerate(lines): 
     carray[num, :] = [float(val) for val in line.strip().split()] 
    cmap = colors.ListedColormap(carray, name=name) 

然后我就可以注册该颜色映射:

cm.register_cmap(name=name, cmap=cmap) 

使:

In [4]: cm.get_cmap('my_cmap') 
Out[4]: <matplotlib.colors.ListedColormap instance at 0x1b114c68> 

问题是cm.get_cmap()只能检索我的自定义色彩图,如果我在同一个程序中。只要我尝试从单独的脚本调用我的自定义色彩映射,cm.get_cmap()将返回None。

我敢肯定,我误解的东西...

回答

4

对于颜色映射到会话之间存在,你必须保存代码在一个文件中,并在每次需要它时将其导入。您可以通过主目录中的.pythonrc自动执行交互式会话。对于脚本,您需要明确指出,或编辑matplotlib代码。

+0

嗯,我想我本以为有永久性地登记的办法色彩映射,以便生成它的代码不再需要再次运行。该死,因为我正在做的事情让事情变得更加困难。感谢你的回答。 – Vorticity 2012-01-05 17:49:06

2

咸菜保存了一个cmap文件供我使用,稍后加载。这里是我的代码,在Python文档复制直出的如用于泡菜:

import pickle 
    fp = open('cmap.pkl', 'wb') 
    pickle.dump(self.myPanel.cmap_n, fp) 
    fp.close() 

后来......

import pickle 
    fp = open('cmap.pkl', 'rb') 
    last_cmap = pickle.load(fp) 
    fp.close() 
+0

啊,泡菜是一个很好的解决方案。我不知道为什么当我在做这件事的时候没有想到这一点。我使用ascii文件结束了,但在这一点上已经处理得相当干净。不过,我想我可能会重新尝试使用泡菜。实际的cmap实例是可序列化的吗? – Vorticity 2014-03-27 05:30:29

+0

泡菜不是一个好的解决方案,你不应该开一个你没有写你自己的泡菜。 – tacaswell 2015-10-01 16:37:42