Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/xpath/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何读取文本文件中的信息以绘制数据?MATLAB_Matlab_Matlab Figure - Fatal编程技术网

如何读取文本文件中的信息以绘制数据?MATLAB

如何读取文本文件中的信息以绘制数据?MATLAB,matlab,matlab-figure,Matlab,Matlab Figure,我从matlab开始,搜索如何获取以.txt文件编写的信息(格式如下: % t, x1, x2 0 1 1 0.01 1.01902 1.0195 0.02 1.03706 1.0376 0.03 1.05411 1.0511 0.04 1.07019 1.0719 0.05 1.08529 1.0829 0.06 1.0994 1.094 0.07 1.11253 1.1153 0.08 1.12468 1.128 0.09 1.13586 1.136 0.1 1.14604 1.14615

我从matlab开始,搜索如何获取以.txt文件编写的信息(格式如下:

% t, x1, x2
0 1 1
0.01 1.01902 1.0195
0.02 1.03706 1.0376
0.03 1.05411 1.0511
0.04 1.07019 1.0719
0.05 1.08529 1.0829
0.06 1.0994 1.094
0.07 1.11253 1.1153
0.08 1.12468 1.128
0.09 1.13586 1.136
0.1 1.14604 1.14615
为了使用matlab将它们绘制成不同的图形,程序必须检查写入的列数(此处为1+2),取第一个列表示Abscise,取下一个列表示绘制y轴。列之间用一个空格(“”)隔开

我的问题是,我不知道如何知道有多少列,然后进行for循环。我感兴趣的是知道如何在一个屏幕上以及在每个列的不同屏幕上绘制所有内容

现在我已经做到了:

 data = load('test.txt');

t  = data(:, 1);
ta = data(:, 2);

x = 0: pi/10: pi;
y = sin(x)/ 100 +1;


figure('Name','Name Hello1','NumberTitle','off', ...
'units','normalized','outerposition',[0.01 0.1 0.5 0.7]);
h1 = figure(1);
plot(t, ta, 'bx', 'LineWidth',2)
title('2-D Line Plot')
xlabel('x')
ylabel('cos(5x)')

figure('Name','Name hello 2 2','NumberTitle','off',...
'units','normalized','outerposition',[0.02 0.07 0.5 0.7]);
h2 = figure(2);
plot(x, y , 'LineWidth',2)
title('2-D Line Plot')
xlabel('x')
ylabel('cos(5x)')

您可以使用以下方法在一个窗口中绘制所有内容:

fid=fopen('test.txt'); % opening the file
dataPlain=textscan(fid,'%s','Delimiter',''); % reading the data from the file
data=cellfun(@str2num,dataPlain{1},'uni',0); % getting only the numerical data
data=cat(1,data{:}); % formatting
figure; % if you want to plot everything in multiple windows, you can put this command into the for loop, too.
hold on
for ii=2:size(data,2)
    plot(data(:,1),data(:,ii)); % plot the data
end

您可以使用以下方法在一个窗口中绘制所有内容:

fid=fopen('test.txt'); % opening the file
dataPlain=textscan(fid,'%s','Delimiter',''); % reading the data from the file
data=cellfun(@str2num,dataPlain{1},'uni',0); % getting only the numerical data
data=cat(1,data{:}); % formatting
figure; % if you want to plot everything in multiple windows, you can put this command into the for loop, too.
hold on
for ii=2:size(data,2)
    plot(data(:,1),data(:,ii)); % plot the data
end

无需使用诸如
fopen
textscan
之类的低级例程来读取这样的常规数据,尤其是在您不知道有多少列的情况下。也无需使用循环来绘制数据,除非您真的希望它们位于单独的图形上,这对于这些数据来说似乎是不寻常的

使用
readtable
读取文件,并在同一轴上绘制所有列:

data = readtable('test.txt');
plot(data{:,1},data{:,2:end});
或者,如果您确实需要单独的数字:

for idx = 1:width(data)-1
   figure(idx)
   plot(data{:,1},data{:,idx+1});
end

无需使用诸如
fopen
textscan
之类的低级例程来读取这样的常规数据,尤其是在您不知道有多少列的情况下。也无需使用循环来绘制数据,除非您真的希望它们位于单独的图形上,这对于这些数据来说似乎是不寻常的

使用
readtable
读取文件,并在同一轴上绘制所有列:

data = readtable('test.txt');
plot(data{:,1},data{:,2:end});
或者,如果您确实需要单独的数字:

for idx = 1:width(data)-1
   figure(idx)
   plot(data{:,1},data{:,idx+1});
end

你想让程序自己计算出有多少列?所以它并不总是3列?你能告诉我们你到目前为止尝试了什么吗?不,它可以是2、3、4甚至10列。我什么都没试过,我已经花了2个小时来理解如何绘制一个函数,哈哈,但我可以添加我的结果。你想让程序计算出来吗它本身有多少列?所以它并不总是3列?你能告诉我们你到目前为止尝试了什么吗?不,可以是2、3、4甚至10列。我什么都没试过,我已经花了2个小时来理解如何绘制一个函数,哈哈,但我可以添加我的结果多个窗口有一个问题,一个窗口显示为n我没有遇到任何问题。你把
figure
-命令放在哪里了?它需要放在plot命令之前。是的,这是我所做的。这并不重要,所以无论如何,谢谢:)多个窗口有一个问题,一个窗口显示为空,我没有遇到任何问题。你把
-命令放在哪里了?它必须在绘图命令之前。是的,这就是我所做的。这没那么重要,所以还是谢谢你:)