plt.imshow()函数小总结

imshow()其实就是将数组的值以图片的形式展示出来,数组的值对应着不同的颜色深浅,而数值的横纵坐标就是数组的索引,比如一个1000X1000的数组,图片里的点也就有1000X1000个,比如第一个行第一个点的坐标就是(0,0),它的值会通过colorbar(也就是cmap)反映出来,所以按照我的理解,imshow()函数的功能就是把数值展示成热图。下面是一个简单的代码段:

x = np.linspace(0, 10, 1000)
I = np.sin(x) * np.cos(x[:, np.newaxis])
plt.imshow(I, cmap='RdBu')
cb = plt.colorbar(label='color bar settings')
plt.show()

而整个imshow()函数中的数组的值,则可以通过plt.colorbar()来展示。之后会在右边出现一条颜色bar,而bar的刻度范围(默认情况下)对应的正是数组的最大值到最小值的范围。

x = np.linspace(0, 10, 1000)
I = np.sin(x) * np.cos(x[:, np.newaxis])
speckles = (np.random.random(I.shape) < 0.01)
I[speckles] = np.random.normal(0, 3, np.count_nonzero(speckles))
plt.figure(figsize=(10, 3.5))

plt.subplot(121)
plt.imshow(I, cmap='RdBu')
plt.colorbar(label='noisy points')

plt.subplot(122)
plt.imshow(I, cmap='RdBu')
plt.colorbar(extend='both', label='noisy points extend')
plt.clim(-1, 1)

 

上面这段代码绘制了两幅图片,一副图是默认的colorbar刻度范围(左图),包含了数组的最大值和最小值;另一幅则自己选定了展示的范围,plt.clim(-1,1)将展示的数据范围锁定在(-1,1)之间(右图)。其余的超出范围的值则通过设置extend参数,使其展示为噪点,extend='both'就是colorbar上下都会有两个小三角。通过下面这个在console中调试的代码段我们可以发现,colorbar的范围确实是数组的值的范围。

print(np.max(I))
11.73080564750175
print(np.min(I))
-12.962268087002979

那为什么第一张图的颜色被冲淡了呢?

我通过改变数组的最大值和最小值,想做做对比:

I[3, 2] = 30
plt.imshow(I, cmap="RdBu")
plt.colorbar(label='max value test')
plt.show()

 

这是改变了最大值时,可以看出整个图片集中在暖色区,这是因为最大值设置之后,整个颜色条的颜色上移了,在(-1,1)范围内的颜色都是暖色调的,而原本数组中的数值大部分也都在整个范围内,所以展示出来的颜色图也都是暖色;

I[2, 3] = 30
I[10, 20] = -200
plt.imshow(I, cmap="RdBu")
plt.colorbar(label='min and max value test')
plt.show()

而当我们把最小值设置成200的时候,整个颜色bar下移了,在(-1,1)范围内的值的颜色大多是冷色调,因此展示出来的色图也就看起来是一片蓝色。

综上,最开始的两张图中的左图,是因为有几个个别的点超出了(-1,1)的范围,导致色块的范围变大,但实际上许多色块区域的颜色并没有出现在图中,也就是没有点与其对应,而大部分点落在的(-1,1)范围内的颜色都是浅蓝色(正数)和浅红色(负数),因此整个色图颜色比较浅,也就是被几个噪点冲淡了;但是当我们设置参数后,色块范围变成了(-1,1),这样大量的点也都在这个范围内,每个点对应的颜色也就区分开来,色彩比较丰富,深浅比较明晰,就是右图所示,更加清晰可见的展示了负数中心和正数中心。而图上的许多小点点就是超出色块范围的噪点。

最后,extend参数如果不设置的话,唯一的影响就是右边的colorbar没有上下两个小三角显示出来。(目前看来是这样的)

  • 38
    点赞
  • 170
    收藏
    觉得还不错? 一键收藏
  • 3
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值