根据matlab中的值绘制几条带颜色的线
Plot several lines with color based on a value in matlab
我有一个包含 5 列的矩阵。第一和第二列是 x_start & y_start 行,第三和第四列是 x_end & y_end。第五个是-这条线中的污染物浓度-给出了我的图表颜色的值。我想为每条线绘制 x_start & y_start 和 x_end & y_end 并根据浓度值给这条线一个颜色,颜色范围从 Cmin 到色图中的 Cmax。有帮助吗?
希望我已经正确理解了您的问题。您可以尝试以下代码。假设您的数据采用以下格式:
% x_start y_start x_end y_end concentration
A = [0 0 1 1 0.3
0 1 3 3 0.6
3 1 6 2 1.2];
并且您使用其中一个 matlab 颜色图
cmap = colormap;
根据最小和最大浓度(颜色图的第一个和最后一个值),您可以通过
计算颜色索引
con_min = 0;
con_max = 2;
ind_c = round((size(cmap,1)-1)*A(:,5)/(con_max-con_min))+1
并用
覆盖图表的ColorOrder
figure;
set(gca,'ColorOrder',cmap(ind_c,:),'NextPlot','replacechildren');
并用
绘制情节
plot([A(:,1) A(:,3)]',[A(:,2) A(:,4)]');
编辑:要显示正确的颜色条,只需添加
colorbar % Display the colorbar
caxis([con_min con_max]) % Scale it to the correct min and max
我的方法不是完全自动化的(如果你期望这样的话)会是:
- 确定
concentration of contaminant
的范围,意思是最小值和最大值。
- 决定你想要多少个不同的地块并将你的浓度值分成箱子。
- 通过提供每个样本所属的 bin 的索引绘制每条线。
举个例子:
我通常更喜欢具有不同线型、点型和颜色的组合方案
lines = '-:';
points = '<>^vdho';
color = 'rgbkm';
因此,如果样本落入第一个箱子(假设 i = 1
),我将执行以下操作:
i = lines(mod(i,length(lines))+1);
p = points(mod(i,length(points))+1);
c = color(mod(i,length(color))+1);
plot(..., sprintf('%s%s%s', l, p, c));
并且由于您有线条、点和颜色的随机组合,所以您得到的不同线条是 2*7*5 = 70。当然您可以更改组合。
我想也许@Nemesis 的解决方案可能更优雅,但这个解决方案可以直接控制某些参数,这就是我提供它的原因。
P.S。我只使用这些颜色,因为其他颜色如青色 ('c') 或黄色 ('y') 显示效果不是很好。
我有一个包含 5 列的矩阵。第一和第二列是 x_start & y_start 行,第三和第四列是 x_end & y_end。第五个是-这条线中的污染物浓度-给出了我的图表颜色的值。我想为每条线绘制 x_start & y_start 和 x_end & y_end 并根据浓度值给这条线一个颜色,颜色范围从 Cmin 到色图中的 Cmax。有帮助吗?
希望我已经正确理解了您的问题。您可以尝试以下代码。假设您的数据采用以下格式:
% x_start y_start x_end y_end concentration
A = [0 0 1 1 0.3
0 1 3 3 0.6
3 1 6 2 1.2];
并且您使用其中一个 matlab 颜色图
cmap = colormap;
根据最小和最大浓度(颜色图的第一个和最后一个值),您可以通过
计算颜色索引con_min = 0;
con_max = 2;
ind_c = round((size(cmap,1)-1)*A(:,5)/(con_max-con_min))+1
并用
覆盖图表的ColorOrder
figure;
set(gca,'ColorOrder',cmap(ind_c,:),'NextPlot','replacechildren');
并用
绘制情节plot([A(:,1) A(:,3)]',[A(:,2) A(:,4)]');
编辑:要显示正确的颜色条,只需添加
colorbar % Display the colorbar
caxis([con_min con_max]) % Scale it to the correct min and max
我的方法不是完全自动化的(如果你期望这样的话)会是:
- 确定
concentration of contaminant
的范围,意思是最小值和最大值。 - 决定你想要多少个不同的地块并将你的浓度值分成箱子。
- 通过提供每个样本所属的 bin 的索引绘制每条线。
举个例子:
我通常更喜欢具有不同线型、点型和颜色的组合方案
lines = '-:';
points = '<>^vdho';
color = 'rgbkm';
因此,如果样本落入第一个箱子(假设 i = 1
),我将执行以下操作:
i = lines(mod(i,length(lines))+1);
p = points(mod(i,length(points))+1);
c = color(mod(i,length(color))+1);
plot(..., sprintf('%s%s%s', l, p, c));
并且由于您有线条、点和颜色的随机组合,所以您得到的不同线条是 2*7*5 = 70。当然您可以更改组合。
我想也许@Nemesis 的解决方案可能更优雅,但这个解决方案可以直接控制某些参数,这就是我提供它的原因。
P.S。我只使用这些颜色,因为其他颜色如青色 ('c') 或黄色 ('y') 显示效果不是很好。