【问题标题】:How to change the color of lines as part of a plot based on a separate vector of values?如何根据单独的值向量将线条的颜色更改为绘图的一部分?
【发布时间】:2018-02-07 08:45:57
【问题描述】:

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

figure;
plot(r)

有没有办法使用另一个 350x1 向量 vr 的结果线着色? V 包含一个整数集合,在这种情况下,从 1 到 4 不等。

我正在想象通话看起来像这样,其中 r 是 350x130 而 v 是 350x1:

figure;
plot(r,v)

【问题讨论】:

    标签: matlab matlab-figure


    【解决方案1】:

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

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

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

    这将创建一个元胞数组并将其转换为comma-separated list 以将plot 称为plot(x1, y1, s1, x2, y2, s2, ...)。颜色仅限定义为plotlinespec 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
    

    【讨论】:

    • 这太棒了!方法 1 正是我所追求的,尽管我在上面指定的情况需要稍作调整 linespecs = {'r' 'g' 'b' 'm'}; c = repmat({1:size(r,2)}, 1, size(r,1)); c(2,:) = num2cell(r, 2); c(3,:) = linespecs(v);情节(c{:})
    猜你喜欢
    • 2021-12-26
    • 1970-01-01
    • 2015-10-19
    • 2020-06-16
    • 2015-01-17
    • 1970-01-01
    • 2012-01-23
    • 1970-01-01
    • 2020-05-28
    相关资源
    最近更新 更多