这是我的问题:
我有一个包含以下数据的文件(示例):
kptn wtk kptc(3) eiglist(:)
1 1.00000 0.0000 -0.5000 0.0000 -8.65212 -8.65212 -2.54501 -2.54501
2 1.00000 0.0000 -0.4500 0.0000 -9.31361 -7.93027 -3.19370 -3.19370
3 1.00000 0.0000 -0.4000 0.0000 -9.90932 -7.14566 -3.77996 -3.77996
4 1.00000 0.0000 -0.3500 0.0000 -10.43755 -6.30634 -4.30047 -4.30047
对于我的情节,我只需要第一个数字(1行数减去第一个)作为X值,将第5个数字后面的数字作为Y值。所以每行我会有多个Y值。所以最后每一行都应该有这样的东西:
X=[1], Y=[-8.65212, -8.65212, -2.54501, -2.54501]
第二行:
X=[2], Y=[-9.31361, -7.93027, -3.19370, -3.19370]
但是,Y值的数量可能因文件而异,但X和Y之间的值的数量将始终为4.
感谢所有帮助
答案 0 :(得分:2)
您可以直接索引到矩阵中以获得所需的值。
在您的情况下,这将如下所示:
Data = [1 1.00000 0.0000 -0.5000 0.0000 -8.65212 -8.65212 -2.54501 -2.54501;
2 1.00000 0.0000 -0.4500 0.0000 -9.31361 -7.93027 -3.19370 -3.19370;
3 1.00000 0.0000 -0.4000 0.0000 -9.90932 -7.14566 -3.77996 -3.77996;
4 1.00000 0.0000 -0.3500 0.0000 -10.43755 -6.30634 -4.30047 -4.30047]
%// As for your comment, to start from line 2 use `Data(2:end,whatever)`
DatatoPlot = [Data(2:end,1) Data(2:end,6:end)]; %// Get the appropriate data using indexing
使用方括号[]告诉Matlab连接数据,即按照指定的顺序依次放置所有数据(这里是水平);
因此DatatoPlot
看起来像这样:
DatatoPlot =
1.0000 -8.6521 -8.6521 -2.5450 -2.5450
2.0000 -9.3136 -7.9303 -3.1937 -3.1937
3.0000 -9.9093 -7.1457 -3.7800 -3.7800
4.0000 -10.4375 -6.3063 -4.3005 -4.3005
然后您可以绘制结果(或使用scatter
):
%// Display the result
figure
hold on
for k = 1:size(DatatoPlot,1)
plot(k,DatatoPlot(k,2:end),'*-') %// Y values correspond to 2nd column until the end.
end
xlim([0 5]) %// To see data more clearly
set(gca,'Xtick',[1:5])
给予:
您可以根据需要自定义。
修改强>
根据您的评论,您可以使用importdata
加载数据。例如:
filename = YourFileName;
delimiterIn = ' '; %// Values are separated by a white space
headerlinesIn = 1; %// There is 1 headerline, which you want to skip.
Data = importdata(filename,delimiterIn,headerlinesIn);
现在Data应该是一个数字数组,因为所有值都是数字。如果它是一个单元格数组,您可以使用cell2mat
将其转换为数字数组。
答案 1 :(得分:0)
首先,如果X和Y之间的距离始终为4,为什么不从样本矩阵中删除前5个数字呢?
M = sample(:,6:end)
你的X是第一列,所以
X = sample(:,1)
现在你可以为每个X
绘制你的Y.figure
for n = 1:length(X)
plot(whatever you wish to plot)
end