Постоянная регистрация цветовых карт в matplotlib - PullRequest
2 голосов
/ 05 января 2012

В настоящее время у меня есть большой набор цветовых карт, которые я использовал на других языках, которые я хотел бы импортировать в 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)

Затем я могу зарегистрировать эту цветовую карту:

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 ]

4 голосов
/ 05 января 2012

Чтобы цветовая карта существовала между сессиями, вам нужно будет сохранить код в файле и импортировать его каждый раз, когда он вам понадобится. Вы можете сделать это автоматически для интерактивных сессий через .pythonrc в вашем домашнем каталоге. Для сценариев вам нужно сделать это явным или отредактировать код matplotlib.

2 голосов
/ 26 марта 2014

Pickle сохранил карту в файл для меня и загрузил ее позже.Вот мой код, скопированный прямо из примера для pickle в документации по 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()
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...