web-dev-qa-db-ja.com

matplotlib 1.4でviridisを使用する方法

カラーマップ「viridis」( http://bids.github.io/colormap/ )を使用したいのですが、まだ開発バージョン1.5にアップデートする予定はありません。したがって、colormaps.pyhttps://github.com/BIDS/colormap からダウンロードしました。残念ながら、私はそれを機能させることができません。これが私がすることです:

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:カラーマップviridisは認識されません。可能な値は次のとおりです。Spectral、summer、coolwarm、...

(そして、最初にインストールされたカラーマップの完全なリスト。)

この問題を修正する方法について何か考えはありますか?

18
ukrutt

set_cmapを使用してviridisをカラーマップとして設定するには、最初に登録する必要があります。

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)
15
aganders3

set_cmapインスタンスを必要とするmatplotlib.colors.Colormapを使用する代わりに、cmap呼び出しでpcolormeshを直接設定できます。

cmaps.viridismatplotlib.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)
11
tmdavison

私がやったのは

_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]]

from 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)
3
P i

here からcolormaps.pyをダウンロードしてください:

import os,sys
scriptpath = "/Your downloading path/colormap-master/"
sys.path.append(os.path.abspath(scriptpath))
import colormaps as cmaps   

できた!

2
Han Zhengzu