代码之家  ›  专栏  ›  技术社区  ›  Chris

如何根据单独的值向量更改线的颜色作为绘图的一部分?

  •  1
  • Chris  · 技术社区  · 6 年前

    我有一个存储在350x130矩阵中的值集合, r ,用于在Matlab中创建一个简单的绘图:

    figure;
    plot(r)
    

    有没有一种方法可以从 r 使用另一个350x1矢量, v ? 在本例中,V包含一个从1到4不等的整数集合。

    我想象这个电话会是这样的, r is 350x130和 v is 350x1:

    figure;
    plot(r,v)
    
    1 回复  |  直到 6 年前
        1
  •  2
  •   Luis Mendo    6 年前

    让我们定义一些示例数据:

    r = rand(10,15);
    v = randi(4,1,15);
    

    方法1(更有趣):使用逗号分隔的列表

    这将创建一个单元格数组并将其转换为 comma-separated list 调用 plot plot(x1, y1, s1, x2, y2, s2, ...) . 颜色仅限于定义为 情节 linespec strings (例如 'g' 'c+' ).

    linespecs = {'r' 'g' 'b' 'm'};
    c = repmat({1:size(r,1)}, 1, size(r,2));
    c(2,:) = num2cell(r, 1);
    c(3,:) = linespecs(v);
    plot(c{:})
    

    方法2(更具可读性和灵活性):使用循环

    linespecs = {'r' 'g' 'b' 'm'};
    hold on
    for k = 1:size(r,2)
        plot(r(:,k), linespecs{v(k)})
    end
    

    此方法允许使用 colormap 指定 任意颜色 ,不限于linespec字符串:

    colors = winter(4); % arbitrary colormap
    hold on
    for k = 1:size(r,2)
        plot(r(:,k), 'color', colors(v(k),:))
    end