此Oct(MatLab)中的plot()函数示例如何工作?

时间:2019-05-01 18:04:38

标签: matlab octave matlab-figure

我在 Octave \ MatLab 中是个新手,在学习了一个教程之后,我发现在尝试理解此 plot()函数版本的工作原理时遇到了一些困难。

所以我有以下情况:

我有一个像这样的数据文件:

34.62365962451697,78.0246928153624,0
30.28671076822607,43.89499752400101,0
35.84740876993872,72.90219802708364,0
60.18259938620976,86.30855209546826,1
79.0327360507101,75.3443764369103,1
45.08327747668339,56.3163717815305,0

与特定学生相关的行。

  • 第一个值是该学生的1级考试的投票。
  • 第一个值是该学生的二年级考试的投票。
  • 第三个值只能是0或1(1表示该学生已被大学录取,0表示该学生未被大学录取)

然后我有这段代码,可以将这些信息加载并绘制成如下图形:

enter image description here

这是从txt文件加载先前数据的代码:

%% Initialization
clear ; close all; clc

%% Load Data
%  The first two columns contains the exam scores and the third column
%  contains the label.

data = load('ex2data1.txt');
X = data(:, [1, 2]); y = data(:, 3);

%% ==================== Part 1: Plotting ====================
%  We start the exercise by first plotting the data to understand the 
%  the problem we are working with.

fprintf(['Plotting data with + indicating (y = 1) examples and o ' ...
         'indicating (y = 0) examples.\n']);

plotData(X, y);

% Put some labels 
hold on;
% Labels and Legend
xlabel('Exam 1 score')
ylabel('Exam 2 score')

% Specified in plot order
legend('Admitted', 'Not admitted')
hold off;

最后,调用定义到另一个文件的 plotData(X,y); 函数并将其传递给 X (考试1和考试的学生成绩矩阵) -2 **和 y (表示此学生是否通过大学选择的向量):

function plotData(X, y)
%PLOTDATA Plots the data points X and y into a new figure 
%   PLOTDATA(x,y) plots the data points with + for the positive examples
%   and o for the negative examples. X is assumed to be a Mx2 matrix.

% Create New Figure
figure; hold on;

% ====================== YOUR CODE HERE ======================
% Instructions: Plot the positive and negative examples on a
%               2D plot, using the option 'k+' for the positive
%               examples and 'ko' for the negative examples.
%

% Find Indices of Positive and Negative Examples
pos = find(y==1); 
neg = find(y == 0);

% Plot Examples
plot(X(pos, 1), X(pos, 2), 'k+','LineWidth', 2, ...
'MarkerSize', 7);
plot(X(neg, 1), X(neg, 2), 'ko', 'MarkerFaceColor', 'y', ...
'MarkerSize', 7);

对于我来说,很明显,我不了解的唯一内容是绘制示例的最后两行:

plot(X(pos, 1), X(pos, 2), 'k+','LineWidth', 2, ...
'MarkerSize', 7);
plot(X(neg, 1), X(neg, 2), 'ko', 'MarkerFaceColor', 'y', ...
'MarkerSize', 7);

我的疑问是:

  1. 什么完全代表传递给此 plot()函数的'k +' ko 参数?我认为 k + 表示 + 符号,而 ko 表示上图中的圆圈符号。但是我绝对不确定这个断言,因为在这里我找不到关于此的信息:https://octave.org/doc/v4.0.0/Two_002dDimensional-Plots.html

  2. 为什么在肯定情况下使用参数 LineWidth ,而在否定情况下使用 MarkerFaceColor

  3. 为什么在这2条情节行中的每条行都在 ... 个字符之后?

    图(X(pos,1),X(pos,2),'k +','LineWidth',2,... 'MarkerSize',7);

这些 ... 到底是什么意思?我试图将所有内容放在这样的一行中:

plot(X(pos, 1), X(pos, 2), 'k+','LineWidth', 2, ... 'MarkerSize', 7);

但是以这种方式进行操作,八度音阶很糟糕,执行被停止。为什么?我想念什么?

1 个答案:

答案 0 :(得分:2)

  1. 'k +'和'ko'建议绘制黑色+和黑色o。 k是颜色,而+和o是绘图类型。有关规格的更多详细信息,请参见https://www.mathworks.com/help/matlab/ref/linespec.html(对于Octave应该相同)

  2. “ LineWidth”将覆盖加号符号线的默认宽度,而“ MarkerFaceColor”将覆盖可以填充的标记的默认填充颜色(例如,圆形,正方形等)。由于未为圆形符号指定LineWidth,因此它仅使用默认宽度。由于加号不可填充,因此不需要MarkerFaceColor。

  3. '...'只是意味着该行溢出到下一行。在某些其他编程语言中,它类似于\或&。