在matplotlib中设置颜色条的范围

我有以下代码:

import matplotlib.pyplot as plt cdict = { 'red' : ( (0.0, 0.25, .25), (0.02, .59, .59), (1., 1., 1.)), 'green': ( (0.0, 0.0, 0.0), (0.02, .45, .45), (1., .97, .97)), 'blue' : ( (0.0, 1.0, 1.0), (0.02, .75, .75), (1., 0.45, 0.45)) } cm = m.colors.LinearSegmentedColormap('my_colormap', cdict, 1024) plt.clf() plt.pcolor(X, Y, v, cmap=cm) plt.loglog() plt.xlabel('X Axis') plt.ylabel('Y Axis') plt.colorbar() plt.show() 

因此,这会产生一个图表,其中X轴和Y轴上的值为'v',使用指定的颜色表。 X和Y轴是完美的,但颜色映射在v的最小值和最大值之间扩展。我想强制颜色映射的范围在0到1之间。

我想过使用:

 plt.axis(...) 

要设置坐标轴的范围,但这只需要X和Y的最小值和最大值的参数,而不是色彩图。

编辑:

为了清楚起见,假设我有一个图的值范围(0 … 0.3),另一个图的值(0.2 … 0.8)。

在这两个图表中,我会希望颜色条的范围是(0 … 1)。 在这两个图表中,我希望这个范围的颜色是完全相同的使用上面的cdict的全部范围(因此在这两个图中0.25将是相同的颜色)。 在第一张图中,0.3到1.0之间的所有颜色不会在图中显示,而是在侧面的颜色栏中。 另一方面,0到0.2之间的所有颜色,以及0.8到1之间的所有颜色将不在图中显示,而是在侧面的颜色栏中显示。

使用vminvmax强制颜色的范围。 这是一个例子:

在这里输入图像描述

 import matplotlib as m import matplotlib.pyplot as plt import numpy as np cdict = { 'red' : ( (0.0, 0.25, .25), (0.02, .59, .59), (1., 1., 1.)), 'green': ( (0.0, 0.0, 0.0), (0.02, .45, .45), (1., .97, .97)), 'blue' : ( (0.0, 1.0, 1.0), (0.02, .75, .75), (1., 0.45, 0.45)) } cm = m.colors.LinearSegmentedColormap('my_colormap', cdict, 1024) x = np.arange(0, 10, .1) y = np.arange(0, 10, .1) X, Y = np.meshgrid(x,y) data = 2*( np.sin(X) + np.sin(3*Y) ) def do_plot(n, f, title): #plt.clf() plt.subplot(1, 3, n) plt.pcolor(X, Y, f(data), cmap=cm, vmin=-4, vmax=4) plt.title(title) plt.colorbar() plt.figure() do_plot(1, lambda x:x, "all") do_plot(2, lambda x:np.clip(x, -4, 0), "<0") do_plot(3, lambda x:np.clip(x, 0, 4), ">0") plt.show() 

使用CLIM函数(相当于MATLAB中的CAXIS函数):

 plt.pcolor(X, Y, v, cmap=cm) plt.clim(-4,4) plt.show() 

不知道这是否是最优雅的解决scheme(这是我用过的),但是可以将数据缩放到0到1之间的范围,然后修改色条:

 import matplotlib as mpl ... ax, _ = mpl.colorbar.make_axes(plt.gca(), shrink=0.5) cbar = mpl.colorbar.ColorbarBase(ax, cmap=cm, norm=mpl.colors.Normalize(vmin=-0.5, vmax=1.5)) cbar.set_clim(-2.0, 2.0) 

有了这两个不同的限制,您可以控制颜色条的范围和图例。 在这个例子中,只有-0.5到1.5之间的范围显示在栏中,而颜色映射覆盖-2到2(所以这可能是您在缩放之前logging的数据范围)。

因此,不是缩放颜色映射,而是缩放数据并使颜色条适合该颜色条。