问题描述
我正在制作一个2d直方图,其值的范围可以从0到大约100,但是我希望1的值容易与0相区别。有没有简便的方法来实现此目的?我知道您可以制作自定义贴图,但是不确定是否有办法使0值成为一种颜色,其余的成为简单的连续贴图。
解决方法
您可以为颜色图使用'under'颜色,并将vmin设置为1。这样,所有值小于1的单元格都将被'under'颜色着色。 colorbar的extend=
选项显示“下”(和/或“上”)颜色。默认使用一个小三角形; extendrect=True
将其显示为小矩形。
如果只想将零值保留为空白,则可以设置cmin=1
,该值将切断所有低于1的值。
import numpy as np
import matplotlib.pyplot as plt
import copy
x = np.random.randn(10000).cumsum()
y = np.random.randn(2000,5).cumsum(axis=1).ravel()
fig,(ax1,ax2) = plt.subplots(ncols=2)
cmap = copy.copy(plt.get_cmap('hot'))
cmap.set_under('turquoise')
_,_,hist1 = ax1.hist2d(x,y,bins=(50,30),cmap=cmap,vmin=1)
ax1.set_title('Using $vmin$ and $set_under$')
plt.colorbar(hist1,ax=ax1,extend='min',extendrect=True)
_,hist2 = ax2.hist2d(x,cmap='inferno',cmin=1)
ax2.set_title('Using $cmin$')
plt.colorbar(hist2,ax=ax2)
plt.show()