我有一堆形状为(1,104)的样本。所有样本都是整数(+ ve,-ve和0),它们在imshow
的{{1}}函数中使用。下面是我创建的将它们显示为图像的功能。
matplotlib
我需要用颜色标记 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()
中的正值和负值。 PS:将0设为正数。
如何更改我的代码?
答案 0 :(得分:1)
您可以创建一个三维数组,为每个像素分配颜色代码。因此,如果要使用黑白,将分别传递(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)
答案 1 :(得分:1)
您可以设置颜色编码的规格化,以使其在数据的负绝对值和正绝对值之间平均分布。使用中间带有浅色的色图可以帮助可视化值与零的距离。
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)
如果相反需要二进制映射,则可以将正值映射到例如1,负数为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)
在这种情况下,使用彩条可能没用。