【问题标题】:Plot several lines with color based on a value in matlab根据matlab中的值绘制几条带颜色的线
【发布时间】:2016-09-28 05:31:17
【问题描述】:

我有一个由 5 列组成的矩阵。第一列和第二列用于行的 x_start 和 y_start,第三和第四列用于 x_end 和 y_end。第五个是-这条线中污染物的浓度-给出我的图表颜色的值。我想为每条线绘制带有 x_end 和 y_end 的 x_start 和 y_start,并根据颜色图中从 Cmin 到 Cmax 的颜色范围内的浓度值给这条线一个颜色。有什么帮助吗?

【问题讨论】:

    标签: matlab plot line colormap


    【解决方案1】:

    希望我正确理解了您的问题。你可以试试下面的代码。假设您的数据采用以下格式:

    %    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
    

    【讨论】:

    • 感谢您的回复,效果很好,但我需要添加一个颜色条,以提供从最小到最大的颜色渐变,如果您能帮助我,我将不胜感激
    【解决方案2】:

    我的方法不是完全自动化的(如果你期望这样的话)会去:

    1. 确定concentration of contaminant 的范围,即最小值和最大值。
    2. 决定您想要多少个不同的图,并将您的浓度值拆分到多个 bin 中。
    3. 通过提供每个样本所属的 bin 的索引来绘制每条线。

    举个例子:

    我通常更喜欢不同线条样式、点样式和颜色的组合方案

    lines = '-:';
    points = '<>^vdho';
    color = 'rgbkm';
    

    因此,如果一个样本落入第一个 bin(想象一下 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 的解决方案可能更优雅,但这个解决方案可以直接控制一些参数,这就是我提供它的原因。

    附:我只使用这些颜色,因为青色 ('c') 或黄色 ('y') 等其他颜色显示效果不佳。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2022-12-11
      • 1970-01-01
      • 1970-01-01
      • 2012-08-04
      相关资源
      最近更新 更多