由段值定义的 MATLAB 颜色图

MATLAB Color Map defined by segment values

我在 MATLAB 中有一个绘图,我想将其转换为颜色图(绘图如下所示)。此图中有多个线段,我希望每个线段都根据与线段关联的特定值进行着色。

例如:

第 1 行的值 = 800,绘制特定颜色

第 2 行的值 = 555,绘制特定颜色 ...等等

有人知道怎么做吗?我在我的程序中包含了制作下面图表的部分代码。在代码中,我希望线条的颜色取决于 ElementMap(i,6)。我对颜色没有特别偏好,只要我能分辨出哪些线段具有更高的值即可。

谢谢

%% Plot        

for i = 1:length(ElementMap)
    if ElementMap(i,6) < 1000
        x = [ElementMap(i,1);ElementMap(i,3)];
        y = [ElementMap(i,2);ElementMap(i,4)];
        plot(x,y,['-','b','o']);
        hold on;
    end
end

您可以为第 6 列中的每个唯一值确定一个索引颜色,然后使用您选择的颜色图将这些索引颜色转换为 RGB 颜色(此处我们使用 parula)。然后在绘制每条线时,指定 Color 属性.

% Get indices to use for the colormap
[~, ~, ind] = unique(ElementMap(:,6));

% Create a colormap of the correct size
cmap = parula(max(ind));

% Create a color for each plot
colors = ind2rgb(ind, cmap);

% Now plot everything
for k = 1:size(ElementMap, 1)
    x = [ElementMap(k,1);ElementMap(k,3)];
    y = [ElementMap(k,2);ElementMap(k,4)];
    plot(x,y, 'Marker', 'o', 'LineStyle', '-', 'Color', colors(k,:));
    hold on
end

使用这种方法,颜色不必随数据线性缩放,但 ElementMap(:,6) 中的每个唯一值将由不同的颜色表示,较小的值将与较大的值区分开来。

如果您不关心每个图都具有唯一值,则可以执行类似下面的操作, 得到颜色和值之间的线性映射。

values = ElementMap(:,6);

% Assign an index to each
ind = gray2ind(mat2gray(values))

% Create the colormap
cmap = parula(numel(unique(inds)));

% Create a color for each plot
colors = ind2rgb(ind, cmap);

% Now plot everything
for k = 1:size(ElementMap, 1)
    x = [ElementMap(k,1);ElementMap(k,3)];
    y = [ElementMap(k,2);ElementMap(k,4)];
    plot(x,y, 'Marker', 'o', 'LineStyle', '-', 'Color', colors(k,:));
    hold on
end

% Now create a colorbar
colorbar()

% Set the range of the colorbar
set(gca, 'CLim', [min(values), max(values)])