如何在Matplotlib 1.4中使用Viridis?

19

我想使用“viridis” (http://bids.github.io/colormap/) 这个颜色映射,但目前我还没有更新到1.5版本的开发版。因此,我已经从https://github.com/BIDS/colormap下载了colormaps.py。不幸的是,我无法让它工作。以下是我所做的:

import matplotlib.pyplot as plt
import matplotlib.image as mpimg
import numpy as np

import colormaps as cmaps

img=mpimg.imread('stinkbug.png')
lum_img = np.flipud(img[:,:,0])

plt.set_cmap(cmaps.viridis)
imgplot = plt.pcolormesh(lum_img)

这给了我一个ValueError,回溯以以下方式结束:

ValueError: Colormap viridis未被识别。可能的值为:Spectral,summer,coolwarm,...

(然后是原始安装的全部色图列表。)

你有什么想法来解决这个问题吗?

4个回答

16

使用 set_cmapviridis 设置为你的颜色映射,你必须先进行注册:

import colormaps as cmaps
plt.register_cmap(name='viridis', cmap=cmaps.viridis)
plt.set_cmap(cmaps.viridis)

img=mpimg.imread('stinkbug.png')
lum_img = np.flipud(img[:,:,0])
imgplot = plt.pcolormesh(lum_img)

太棒了,正是我所需要的。 - ukrutt

12

不必使用需要 matplotlib.colors.Colormap 实例的 set_cmap,而是可以直接在 pcolormesh 调用中设置 cmap

(cmaps.viridis 是一个 matplotlib.colors.ListedColormap)

import matplotlib.pyplot as plt
import matplotlib.image as mpimg
import numpy as np

import colormaps as cmaps

img=mpimg.imread('stinkbug.png')
lum_img = np.flipud(img[:,:,0])

imgplot = plt.pcolormesh(lum_img, cmap=cmaps.viridis)

什么会导致 ImportError: No module named colormaps - AnnanFay
@Annan:你从 https://github.com/BIDS/colormap 下载了 colormaps.py 吗? - tmdavison
@tom 感谢您回复我的问题。我没有意识到它是一个单独的模块(我一直在跳来跳去地看关于“viridis”cmap的几个问题,没有完全阅读您正在回答的问题)。实际上,我通过将matplotlib更新到最新版本(对我来说是1.5.3)来解决了这个问题。 - AnnanFay
@ Annan。是的,显然获取viridis最好的方法是使用最新版本的matplotlib(即任何版本> = 1.5)。但是,这个问题和答案是关于在一个不包括viridis色图的matplotlib版本(1.4)中使用viridis的。 - tmdavison

3
我所做的就是复制了这个。
_viridis_data = [[0.267004, 0.004874, 0.329415],
                 [0.268510, 0.009605, 0.335427],
                 [0.269944, 0.014625, 0.341379],
                 :
                 [0.983868, 0.904867, 0.136897],
                 [0.993248, 0.906157, 0.143936]]

来自https://github.com/BIDS/colormap/blob/master/colormaps.py

并添加:

from matplotlib.colors import ListedColormap

viridis = ListedColormap(_viridis_data, name='viridis')

plt.register_cmap(name='viridis', cmap=viridis)
plt.set_cmap(viridis)

2
这里下载colormaps.py文件,然后:
import os,sys
scriptpath = "/Your downloading path/colormap-master/"
sys.path.append(os.path.abspath(scriptpath))
import colormaps as cmaps   

完成了!


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接