2012-01-05 3 views
2

私は現在、matplotlibで使用するためにPythonにインポートしたい他の言語で使用していた大量のカラーマップを持っています。私はそのようにのようなカラーマップに、RGB配列に3列のASCIIファイルを変換することができる午前: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

2

pickleは私のためにファイルに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

+0

ピクルは良い解決策ではありません、あなたはあなた自身を書いていないピクルを決して開くべきではありません。 – tacaswell