由段值定义的 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)])
我在 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)])