具有固定颜色渐变的 np.histogram2D
np.histogram2D with fixed colour gradient
我正在尝试修改现有的 python 代码,该代码使用 np.histogram2d
绘制值的热图。我正在绘制其中的几个,我希望 y 轴和颜色范围在它们之间具有可比性。我找到了手动设置 y_limit
的方法,但现在我希望颜色范围也固定下来。下面的代码片段:
hist,xedges,yedges = np.histogram2d(x,y, bins=[20, 50], range=[ [0, 100.0], [0, y_limit] ])
# draw the plot
extent = [xedges[0], xedges[-1], yedges[0], yedges[-1] ]
im = ax.imshow(hist.T,extent=extent,interpolation='nearest',origin='lower', aspect='auto')
# colormap, colorbar, labels, ect.
im.set_cmap('gist_heat_r')
divider = make_axes_locatable(ax)
cax = divider.append_axes("right", "5%", pad="3%")
ax.figure.colorbar(im, cax=cax)
ax.set_title(d['name'] + ' foo')
ax.set_xlabel("bar")
ax.set_ylabel("coverage")
还有一个显示不同颜色范围的示例,其中一个从 0 到 2800 以上,另一个从 0 到 2400 以上。我希望能够将颜色范围设置为固定的最大值,例如两人3000。有什么想法吗?
已编辑:使用 vmin
和 vmax
解决。
我从 this post
中截取了一段代码
class MidpointNormalize(Normalize):
def __init__(self, vmin=None, vmax=None, midpoint=None, clip=False):
self.midpoint = midpoint
Normalize.__init__(self, vmin, vmax, clip)
def __call__(self, value, clip=None):
# I'm ignoring masked values and all kinds of edge cases to make a
# simple example...
x, y = [self.vmin, self.midpoint, self.vmax], [0, 0.5, 1]
return np.ma.masked_array(np.interp(value, x, y))
我这样使用它:
norm = MidpointNormalize(midpoint=0.5,vmin = 0, vmax = 1)
ax.scatter(x, y,c=z, cmap = cm, norm = norm)
imshow
也有参数 norm
,它应该可以工作。
我正在尝试修改现有的 python 代码,该代码使用 np.histogram2d
绘制值的热图。我正在绘制其中的几个,我希望 y 轴和颜色范围在它们之间具有可比性。我找到了手动设置 y_limit
的方法,但现在我希望颜色范围也固定下来。下面的代码片段:
hist,xedges,yedges = np.histogram2d(x,y, bins=[20, 50], range=[ [0, 100.0], [0, y_limit] ])
# draw the plot
extent = [xedges[0], xedges[-1], yedges[0], yedges[-1] ]
im = ax.imshow(hist.T,extent=extent,interpolation='nearest',origin='lower', aspect='auto')
# colormap, colorbar, labels, ect.
im.set_cmap('gist_heat_r')
divider = make_axes_locatable(ax)
cax = divider.append_axes("right", "5%", pad="3%")
ax.figure.colorbar(im, cax=cax)
ax.set_title(d['name'] + ' foo')
ax.set_xlabel("bar")
ax.set_ylabel("coverage")
还有一个显示不同颜色范围的示例,其中一个从 0 到 2800 以上,另一个从 0 到 2400 以上。我希望能够将颜色范围设置为固定的最大值,例如两人3000。有什么想法吗?
已编辑:使用 vmin
和 vmax
解决。
我从 this post
中截取了一段代码class MidpointNormalize(Normalize):
def __init__(self, vmin=None, vmax=None, midpoint=None, clip=False):
self.midpoint = midpoint
Normalize.__init__(self, vmin, vmax, clip)
def __call__(self, value, clip=None):
# I'm ignoring masked values and all kinds of edge cases to make a
# simple example...
x, y = [self.vmin, self.midpoint, self.vmax], [0, 0.5, 1]
return np.ma.masked_array(np.interp(value, x, y))
我这样使用它:
norm = MidpointNormalize(midpoint=0.5,vmin = 0, vmax = 1)
ax.scatter(x, y,c=z, cmap = cm, norm = norm)
imshow
也有参数 norm
,它应该可以工作。