在matplotlib中永久注册色彩映射

时间:2012-01-05 05:52:36

标签: python matplotlib

我目前有一大堆彩色地图,我在其他语言中使用过,我想导入python以便在matplotlib中使用。我能够将三列ascii文件转换为RGB数组,然后转换为如下颜色映射:

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)

然后我可以注册该colormap:

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。

我确定我误解了一些事情......

2 个答案:

答案 0 :(得分:4)

要使会话之间存在色彩映射,您必须将代码保存在文件中,并在每次需要时将其导入。您可以通过主目录中的.pythonrc自动执行此操作以进行交互式会话。对于脚本,您需要将其显式化,或编辑matplotlib代码。

答案 1 :(得分:2)

pickle为我保存了一个cmap文件并稍后加载。这是我的代码,直接从python docs中的pickle示例中复制出来:

    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()