2012-01-05 3 views
2

현재 matplotlib에서 사용하기 위해 파이썬으로 가져 오려는 다른 언어에서 사용한 많은 색상 표가 있습니다.matplotlib의 컬러 맵 영구 등록하기

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

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

:

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) 

내가 그 컬러 맵을 등록 할 수 있습니다 그래서 같은 색상 맵에 다음의 RGB 배열에 3 열로 된 ASCII 파일을 변환 할 수 있어요

동일한 프로그램에있는 경우 cm.get_cmap() 만 내 사용자 지정 색상 맵만 검색 할 수 있습니다. 별도의 스크립트에서 내 사용자 정의 색상 맵을 호출하면, cm.get_cmap()은 None을 반환합니다. 내가 뭔가를 오해하고있어 확신

... 색상 맵 세션 사이에 존재하는

답변

4

, 당신은 파일에 코드를 저장하고 당신이 그것을 필요로 할 때마다 수입해야합니다. 홈 디렉토리의 .pythonrc를 통해 대화식 세션에 대해이 작업을 자동으로 수행 할 수 있습니다. 스크립트의 경우 명시 적으로 지정하거나 matplotlib 코드를 편집해야합니다.

+0

아, 내가 영구적으로 등록하는 방법이 당연하다고 생각했다 추측

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

이후 ... 다음은 파이썬 문서에 피클 똑바로 예에서 복사 내 코드입니다 colormap을 생성하므로 코드를 생성 한 코드를 다시 실행할 필요가 없습니다. 이런, 내가하고있는 일로 인해 일이 좀 더 어려워진다. 답변 해주셔서 감사합니다. – Vorticity

2

피클은 나를 위해 파일에 cmap을 저장하고 나중에로드했습니다.

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

아, 피클은 좋은 해결책입니다. 내가이 일을 할 때 왜 내 마음을 아프게하지 않았는지 모르겠다. 나는 ascii 파일을 사용하여 감았지만,이 시점에서이 파일을 비교적 깨끗하게 처리했다. 나는 이것을 재검토하고 피클을 사용해 볼 수 있다고 생각한다. 실제 cmap 인스턴스가 직렬화 가능합니까? – Vorticity

+0

피클은 좋은 해결책이 아닙니다. 결코 자기 자신을 쓰지 않은 피클을 열면 안됩니다. – tacaswell