, как упоминалось zsolt, некоторые двигатели регулярных выражений поддерживают рекурсию - конечно, обычно это те, которые используют алгоритм обратного отслеживания, поэтому он не будет особенно эффективен. пример: /(?>[^{}]*){(?>[^{}]*)(?R)*(?>[^{}]*)}/sm
Как насчет этого?
% 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);
Попробуйте следующее:
cmap = colormap; % get current colormap
cmap=cmap([min max],:); % set your range here
colormap(cmap); % apply new colormap
colorbar();
Я считаю, что 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);
Конечно, объединение этого с caxis
является самым мощным.
Если вы не хотите показывать некоторые значения вне диапазона, это не задание для colorbar
или caxis
, это зависит от вас - вам придется настроить данные, которые построены так что все значения, которые вы не хотите , хотите построить NaN
. Это позволит Matlab понять, что вы не хотите строить эти данные:
data( indices_to_data_not_to_plot ) = NaN;
surf(x,y,data); %# or whatever you're using