读取文本文件中的数据并绘制图形的问题(Matlab)

时间:2014-03-14 12:01:24

标签: matlab graph normal-distribution

我使用以下代码从两个文本文件中收集数据,将它们连接在一起,然后绘制它们。出于某种原因,我似乎得到两块而不是一块,我不知道为什么会这样。

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);

Figure

由于

1 个答案:

答案 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,'.');

但这仅在您的数据点非常接近时才有用。