Numpy imshow的色条,以0为中心,具有符号刻度
我想生成一个网格图,由几个数组组成,具有正值和负值,具有对数比例,共享相同的色条 我已经实现了colorbar的共享部分(使用ImageGrid和公共的最大值和最小值),并且我知道我可以在imshow调用中使用LogNorm()在只有正值的情况下获得对数刻度。但考虑到负值的存在,我需要一个对称对数刻度的色条 我已经找到了解决方案,但运行Yann提供的示例代码会得到非常不同的结果,显然是错误的: 查看代码时,我无法理解发生了什么 除此之外,我还发现在Matplotlib 1.2上,scale.SymmetricalLogScale.SymmetricalLogTransform要求一个文档中未解释的新参数(linscale,查看其他转换的代码,我认为将其保留为1是一个安全值)Numpy imshow的色条,以0为中心,具有符号刻度,numpy,matplotlib,Numpy,Matplotlib,我想生成一个网格图,由几个数组组成,具有正值和负值,具有对数比例,共享相同的色条 我已经实现了colorbar的共享部分(使用ImageGrid和公共的最大值和最小值),并且我知道我可以在imshow调用中使用LogNorm()在只有正值的情况下获得对数刻度。但考虑到负值的存在,我需要一个对称对数刻度的色条 我已经找到了解决方案,但运行Yann提供的示例代码会得到非常不同的结果,显然是错误的: 查看代码时,我无法理解发生了什么 除此之外,我还发现在Matplotlib 1.2上,scale.Sy
最简单的解决方案是对LogNorm进行子类化吗?我过去使用过一个非常简单的方法来实现这一点,而不需要进行任何子类化。matplotlib.colors.SymLogNorm提供了您需要的大部分功能,但我发现有必要手动生成记号。请注意,此解决方案使用matplotlib 1.3.0,我可能正在使用1.2中没有的功能
def imshow_symlog(my_matrix, vmin, vmax, logthresh=5):
img=imshow( my_matrix ,
vmin=float(vmin), vmax=float(vmax),
norm=matplotlib.colors.SymLogNorm(10**-logthresh) )
maxlog=int(np.ceil( np.log10(vmax) ))
minlog=int(np.ceil( np.log10(-vmin) ))
#generate logarithmic ticks
tick_locations=([-(10**x) for x in xrange(minlog,-logthresh-1,-1)]
+[0.0]
+[(10**x) for x in xrange(-logthresh,maxlog+1)] )
cb=colorbar(ticks=tick_locations)
return img,cb
因为1.3 matplotlib有一个符号规范