在Matlab图中更改线属性

时间:2015-05-07 01:56:34

标签: matlab plot

在for循环中调用时,我一直在尝试在Matlab中改变行属性。事实证明ColorOrderLineStyleOrder这样的自动系统毫无用处,因为它们不会同时进行索引。我需要更改每一行的颜色和标记/线条样式。我找到了最好的解决方案:

hold on;
col = hsv(5);
mar = ['d','o','s','^','v','<','>'];
beta = [1,2,3,4,5];

for m = 1:length(beta)
    b = beta(m);
    y=[];
    s = 0:05:8;
    for m = s
        y = [y integral(@(f)fun(m,b,f),0.0001,1000)];
    end
    plot(s,y./y(1),'Marker',mar(m),'color',col(m,:),'DisplayName',num2str(b))
    legend('-DynamicLegend'); %automatically generate legend
end
hold off;

为了获得颜色和标记的迭代器,我被迫在beta的长度上循环而不是beta本身。但是,尽管这与文档中描述的完全相同,但颜色和标记都没有变化。我怀疑有一些奇怪的互动,但我无法弄清楚它是什么。有谁知道为什么这不会导致不同颜色和不同线条的标记?

1 个答案:

答案 0 :(得分:2)

我在某处看到,在早期版本的Matlab中,我们无法在调用plot期间同时更改这两个属性...我希望我有参考。我正在使用R2013a,它无论如何都无法正常工作。

作为一种变通方法,您可以为各个绘图指定一个句柄,并在绘图完成后同时更改两个属性

换句话说,使用类似的东西:

hPlot = plot(...)
set(hPlot,'Marker',...,'Color',...,'LineStyle',...)

使用您的代码,看起来像这样:

clear
clc
close all

hold on;
col = hsv(5);
mar = {'d','o','s','^','v'};
%// ======== NEW ========\\%
linestyles = {'-' '--' ':' '-.' '-'}
beta = [1,2,3,4,5];

%// Dummy function
fun = @(x,y,z) x.*y-z;

for m = 1:length(beta)
    b = beta(m);
    y=[];
    s = 0:05:8;
    for m = s
        y = [y integral(@(f)fun(m,b,f),0.0001,1000)];
    end
    %// ======== NEW ========\\%
    hPlot(b) = plot(s,y./y(1));

    set(hPlot(b),'Marker',mar{b},'color',col(b,:),'LineStyle',linestyles{b},'DisplayName',num2str(b))

    legend('-DynamicLegend'); %automatically generate legend
end
hold off;

使用以下输出:

enter image description here