Python matplotlib -图中的正值和负值的颜色代码

nwnhqdif  于 12个月前  发布在  Python
关注(0)|答案(2)|浏览(136)

我有一堆形状为(1,104)的样本。所有样本都是整数(正,负和0),它们被用在matplotlibimshow函数中。下面是我创建的将它们显示为图像的函数。

def show_as_image(sample):
    bitmap = sample.reshape((13, 8))
    plt.figure()
    # this line needs changes.
    plt.imshow(bitmap, cmap='gray', interpolation='nearest')
    plt.colorbar()
    plt.show()

字符串
我需要颜色代码sample的正值和负值。**PS:取0为正值。**我如何改变我的代码?

d4so4syb

d4so4syb1#

您可以设置颜色编码的标准化,使其在数据的负绝对值和正绝对值之间均匀分布。使用中间带有浅色的色图可以帮助可视化值离零有多远。

import numpy as np
import matplotlib.pyplot as plt

def show_as_image(sample):
    bitmap = sample.reshape((13, 8))
    maxval = np.max(np.abs([bitmap.min(),bitmap.max()]))
    plt.figure()
    plt.imshow(bitmap, cmap='RdYlGn', interpolation='nearest',
               vmin=-maxval, vmax=maxval)
    plt.colorbar()
    plt.show()

sample=np.random.randn(1,104)
show_as_image(sample)

字符串


的数据
如果需要二进制Map,则可以将正值Map为1,将负值Map为0。

import numpy as np
import matplotlib.pyplot as plt

def show_as_image(sample):
    bitmap = sample.reshape((13, 8))
    bitmap[bitmap >= 0] = 1
    bitmap[bitmap < 0] = 0
    plt.figure()
    plt.imshow(bitmap, cmap='RdYlGn', interpolation='nearest',
               vmin=-.1, vmax=1.1)
    plt.show()

sample=np.random.randn(1,104)
show_as_image(sample)



在这种情况下,使用颜色条可能是无用的。

wh6knrhe

wh6knrhe2#

你可以创建一个三维数组,为每个像素分配一个颜色代码。所以如果你想要黑色和白色,你将分别传递(0,0,0)(1,1,1)。类似这样的东西应该可以工作:

def show_as_image(sample):
    bitmap = sample.reshape((13, 8))
    bitmap_colored = np.zeros((13,8,3))
    bitmap_colored[bitmap>=0] = [1,1,1] # black for values greater or equal to 0
    bitmap_colored[bitmap<0] = [0,0,0] # white for values less than 0
    plt.figure()
    plt.imshow(bitmap_colored, interpolation='nearest')
    plt.show()

字符串
举例来说:

>>> sample = np.random.randint(low=-10,high=10,size=(1,104))
>>> show_as_image(sample)


将输出如下内容:

相关问题