【问题标题】:Octave - Variable point symbol in plot八度 - 图中的可变点符号
【发布时间】:2012-05-18 03:19:29
【问题描述】:

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

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

plot (X, Y, "*")

但是我怎样才能涉及第三个向量 Z,以便为某些 Z 值显示“*”,而为其他值显示“+”?

【问题讨论】:

  • 您能否再澄清一下您的问题?是否要根据 Z 的第 i 个元素来更改 Y 的第 i 个点(针对 X 绘制)的点样式?
  • 是的,就是这样。我基本上希望我的点样式成为二维图上的第三个维度,能够显示两个不同的值。换句话说,点的位置由 X(i) 和 Y(i) 定义,而点的样式是 Z(i) 的函数。

标签: octave


【解决方案1】:

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

考虑到您要为 Z 值打印 (+),为 打印 (*) > 值,下面的代码会做到这一点:

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

【讨论】:

  • 我认为这个答案更好。
【解决方案2】:

试试这样的:

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

【讨论】:

  • 我真的更多地考虑 Z 本身就是一个长度为 'n' 的数值向量。特定点“i”的点样式(* 或 +)的值将是 Z(i) 的函数。
  • 也许我不太明白你想要什么。似乎我的第二个代码示例可以进行调整,使点样式取决于 Z 的数值。也许您可以编写一个伪代码示例来显示您想要的内容?
  • 你是对的。现在我看了一下,我认为您的答案可以适应我的目的。谢谢。
【解决方案3】:

下面的代码将为 z > 0 打印“ro”,为 z

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2015-03-12
    • 1970-01-01
    • 1970-01-01
    • 2014-10-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多