我使用以下代码从两个文本文件中收集数据,将它们连接在一起,然后绘制它们。出于某种原因,我似乎得到两块而不是一块,我不知道为什么会这样。
load MODES1.dat; % read data into the MODES1 matrix
x1 = MODES1(:,1); % copy first column of MODES1 into x1
y1 = MODES1(:,2); % and second column of MODES1 into y1
load MODES.dat; % read data into the MODES matrix
x = MODES(:,1); % copy first column of MODES into x
y = MODES(:,2); % and second column of MODES into y
% Joining the two sets of data
endx = [x1;x];
endy = [y1;y];
figure(1)
plot(endx,endy)
xlabel('Unique Threshold Strains','FontSize',12);
ylabel('Probabilities of occurrence','FontSize',12);
title('\it{Unique Values versus frequencies of occurrence}','FontSize',16);
由于
答案 0 :(得分:1)
你的问题非常简单。 Matlab的plot
命令为参数定义的每个数据点创建一个点,并按照它们在第一个参数中出现的顺序连接这些点。要了解此行为,请尝试
x = [0;1;-1;2;-2;3;-3;4;-4;5];
plot(x,x.^2);
你不会得到你可能期望的二次函数图。
要解决此问题,您必须以相同方式对输入数组进行排序。对一个数组进行排序很简单(sort(endx)
),但您希望以相同的方式对它们进行排序。 Matlab实际上为您提供了执行此操作的功能,但它仅适用于矩阵,因此您需要进行一些连接/分离:
input = sortrows( [endx endy] );
endx = input(:,1);
endy = input(:,2);
这将对endy
右侧endx
相对于第一列(endx
)建立的矩阵行进行排序。现在您的输入正确排序,结果图表只显示一行。 (更准确地说,一条线在某些时候没有回到它来自的地方。)
根据您的实际用例和数据来源,实现此目的的另一种方法是构建x
的平均值,而不是{{1} },你建立endx = [x1;x];
。
另一种方法是完全放弃该行并使用
endx = mean([x1 x],2);
或
plot(endx,endy,'.');
但这仅在您的数据点非常接近时才有用。