八度 - 图中的可变点符号

时间:2012-05-18 03:19:30

标签: octave

我正在绘制两个相互对立的向量。我想根据第三个向量中的相应值来改变用于绘制每个点的符号。

换句话说,如果我正在绘制X和Y,我知道我可以将每个绘图点显示为'*',如下所示:

plot (X, Y, "*")

但是如何涉及第三个向量Z,以便为某些Z值显示“*”,为其他值显示“+”?

3 个答案:

答案 0 :(得分:2)

下面的代码将打印' ro'对于z> 0和' bx'对于z< 0

plot(x(z>0), y(z>0), 'ro', x(z<0), y(z<0), 'bx')

答案 1 :(得分:2)

也可以通过使用find方法获取Z的元素索引来完成,其中 + / * 将打印在2个单独的数组中。

考虑到您要为值Z打印(+),为否定(*) >值,以下代码将执行此操作:

    pos = find(Z > 0); neg = find(Z <= 0);
    plot(X(pos), Y(pos), 'k+', X(neg), Y(neg), 'k*');

答案 2 :(得分:1)

尝试这样的事情:

x = [1 2 3];
y = [1 4 9];
z = {'*' '+' '*'};
for i_=1:length(x)
    eval(["plot(x(" num2str(i_) "),y(" num2str(i_) "),'" z{i_} "')"])
    hold on
end

这基本上会生成n个图,其中nxy的长度。如果您希望每个点的点颜色发生变化,可以使用hold all代替hold on。如果您希望点样式以y的值为条件,则可以执行

x = [1 2 3];
y = [1 4 9];
z = {'*' '+' '*'};
for i_=1:length(x)
    if (y(i_) > 1)
        z{i_} = '*';
    else
        z{i_} = '+';
    end
    eval(["plot(x(" num2str(i_) "),y(" num2str(i_) "),'" z{i_} "')"])
    hold on
end