我目前有一大堆彩色地图,我在其他语言中使用过,我想导入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。
我确定我误解了一些事情......
答案 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()