6

4 つの異なる色のカラー マップを作成しようとしています。NumPy 配列があり、その配列には 0、.25、.75、および 1 の 4 つの値があります。たとえば、0 の場合は緑、.25 の場合は青、.75 の場合は黄色、 1の場合は赤?

ありがとう!

4

4 に答える 4

2

Nx3 numpy 配列をカラーマップに変換するこの関数をお勧めします

import numpy as np
import matplotlib.pyplot as plt
from matplotlib import colors

#-----------------------------------------
def array2cmap(X):
    N = X.shape[0]

    r = np.linspace(0., 1., N+1)
    r = np.sort(np.concatenate((r, r)))[1:-1]

    rd = np.concatenate([[X[i, 0], X[i, 0]] for i in xrange(N)])
    gr = np.concatenate([[X[i, 1], X[i, 1]] for i in xrange(N)])
    bl = np.concatenate([[X[i, 2], X[i, 2]] for i in xrange(N)])

    rd = tuple([(r[i], rd[i], rd[i]) for i in xrange(2 * N)])
    gr = tuple([(r[i], gr[i], gr[i]) for i in xrange(2 * N)])
    bl = tuple([(r[i], bl[i], bl[i]) for i in xrange(2 * N)])


    cdict = {'red': rd, 'green': gr, 'blue': bl}
    return colors.LinearSegmentedColormap('my_colormap', cdict, N)
#-----------------------------------------
if __name__ == "__main__":

    #define the colormar
    X = np.array([[0., 1., 0.],  #green
                  [0., 0., 1.],  #blue
                  [1., 1., 0.],  #yellow
                  [1., 0., 0.]]) #red
    mycmap = array2cmap(X)

    values = np.random.rand(10, 10)
    plt.gca().pcolormesh(values, cmap=mycmap)

    cb = plt.cm.ScalarMappable(norm=None, cmap=mycmap)
    cb.set_array(values)
    cb.set_clim((0., 1.))
    plt.gcf().colorbar(cb)
    plt.show()

生成されます: ここに画像の説明を入力

于 2013-12-19T17:00:53.900 に答える
1

で試しListedColormapてくださいBoundaryNorm例については、 http://matplotlib.sourceforge.net/examples/api/colorbar_only.htmlを参照してください。

于 2012-07-06T15:07:52.533 に答える
0

それにはいくつかの方法があります。これは私が過去に使用したものです:


def color(value, data):
    c=colorsys.hsv_to_rgb(value / data.max() / (1.1), 1, 1)
return c[::-1]

値の配列を渡し、データがそれを指している場合、渡された配列の最大値に関連するランクに基づいて、青から赤までの範囲の色を返す必要があります。

こちらのサンプルコードも参照してください: http://www.scipy.org/Cookbook/Matplotlib/ColormapTransformations

于 2012-07-06T15:10:40.760 に答える