如何手动设置色条的范围?

6

我有一系列各不相同的数值,通过绘制散点图(x,y,z),z轴代表的colorbar显示了一系列各不相同的数值。但我只对数值较高的部分感兴趣,因此想要调整colorbar的数值范围。有没有什么方法能够实现这个目的呢?

以下是我用于绘图的代码的一部分,我还打算用对数坐标轴绘制图形。例如,我希望在我的对数图中将范围设置为14到最大值。

我希望有些数值根本不显示出来,这样colorbar就会有一个有限的范围,例如从14到最大值。目前,在对数图中,colorbar显示的范围为9到最大值。

scatter(x(1:end-1), y(1:end-1), 5, gnd);

title('G plot (m^-^2)');

colorbar('eastoutside');

xlabel(' X-axis (microns)');

ylabel('Y-axis (microns)');

figure;

log_g=log10(gnd);

scatter(x(1:end-1), y(1:end-1), 5,log_g);

colorbar('eastoutside');

xlabel(' X-axis (microns)');

ylabel('Y-axis (microns)');

title('G Density, log plot (m^-^2)');

你的需求不是很清楚。你是想改变色条中的颜色,还是想完全防止某些值被显示出来? - Junuxx
我希望有些值根本不显示。这样颜色条就有一个有限的范围,比如从14到最大值。目前在对数图中它显示的是从9到最大值。 - rcty
为什么不直接从图中删除你不想显示的点呢? - slayton
我该怎么做?我有一个1600000行的矩阵(mx1),在绘图时如何指示我的程序不考虑其中特定的点而只考虑其他点? - rcty
3个回答

11

我相信你要找的命令是caxis。用法:

caxis([minValue maxValue]) 

使用caxis可以将范围在[minValue maxValue]之外的所有值分别着以色图中的最低或最高的颜色。

由于colorbar和相关函数使用colormap,如果要调整所使用的颜色数量,则必须调整当前的颜色映射。可以按照以下方式完成:

%# get current colormap
map = colormap;  

%# adjust for number of colors you want
rows = uint16(linspace(1, size(map,1), NUM_COLORS)) ;
map = map(rows, :);

%# and apply the new colormap
colormap(map);
当然,将这个与相结合是最强大的。如果你不想显示范围之外的一些值,那么这不是或的工作,而是由你来完成--你必须调整绘制的数据,以便所有你不想绘制的值为。这样做将使Matlab理解您不希望绘制这些数据:
data( indices_to_data_not_to_plot )  = NaN;
surf(x,y,data);  %# or whatever you're using

是的,我之前用过那个,但我希望颜色条只显示5个值,就像caxis([14 16])一样,我只想显示14、14.5、15、15.5和16这几个值。 - rcty
@rcty:啊,就是这样。你需要定义一个自定义的颜色映射表,让我来编辑一下。 - Rody Oldenhuis

0
这个怎么样?
% don’t know why, but apparently your x and y are one value too long?
x = x(1:end-1); y = y(1:end-1); 

% only plot values of 14 or higher
scatter(x(gnd>=14), y(gnd>=14), 5, gnd(gnd>=14);

实际上是z轴(地面)在色条上显示...但我也尝试了你的方法,它没用。 - rcty
是的,这将选择gnd大于或等于14的x和y值。所有gnd < 14的数据点都被省略了。我看到我忘记对gnd应用相同的过滤器了。已经更正。 - Junuxx

0

试试这个:

cmap = colormap; % get current colormap
cmap=cmap([min max],:); % set your range here
colormap(cmap); % apply new colormap
colorbar();

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接