Matlab 读取列中的值以进行绘图

Matlab 读取列中的值以进行绘图,matlab,window,plot,figure,Matlab,Window,Plot,Figure,我需要创建一个同时具有两个绘图的图形窗口。我得到了一个.txt文件,其中包含一些介绍行和3列值。第一列有x的值,第二列和第三列有y的值 首先使用fid=fopen等访问文件 第二,阅读文件并跳过前30行(介绍行),我是这样做的: headlines = fgetl(fid); for i = 1:30 tline = fgetl(fid); headlines = char(headlines(1:i-1,:), tline); 第三,绘制

我需要创建一个同时具有两个绘图的图形窗口。我得到了一个.txt文件,其中包含一些介绍行和3列值。第一列有x的值,第二列和第三列有y的值

首先使用fid=fopen等访问文件

第二,阅读文件并跳过前30行(介绍行),我是这样做的:

    headlines = fgetl(fid);
     for i = 1:30
         tline = fgetl(fid);
         headlines = char(headlines(1:i-1,:), tline);
第三,绘制图形本身时,我将使用hold(或hold on)进行绘制,以便两个图形都位于同一图形窗口中。不知何故,我需要把一个专栏变成一个价值观的集合体,放在情节上。我可以手工写,但我需要程序自己读。我不能很好地解释,但我想你明白了

最后用fclose(fid)等将其关闭


你能帮我做第三件事吗?如果少了什么,请告诉我?提前谢谢:)

我不确定它是否能解决您的问题。但我会这样做:

values.txt:

...
...
1 0 0
2 0 1
3 1 0
4 1 1
5 1 2
6 2 4
matlab脚本:

[x y1 y2]=textread('values.txt','%f %f %f','headerlines',30)
plot(x,[y1 y2])
结果:


我不确定它是否能解决您的问题。但我会这样做:

values.txt:

...
...
1 0 0
2 0 1
3 1 0
4 1 1
5 1 2
6 2 4
matlab脚本:

[x y1 y2]=textread('values.txt','%f %f %f','headerlines',30)
plot(x,[y1 y2])
结果:


好的,我想我找到问题了。我怀疑你的数据中有一些无效的文本。我在网上搜索了一下,我想我找到了数据的副本

此数据集的结尾如下所示:

 2007      0.75      0.69
 2008      0.56      0.70
 2009      0.72    -99.99
 2010      0.83    -99.99
-------------------------
末尾的----行导致它出错

因此,我使用了以下方法:

fid = fopen('gl_land.txt','r');
C = textscan(fid,'%f %f %f','headerlines',30,'commentstyle','--');
fclose(fid);
x = C{1}; y1 = C{2} y2 = C{3};
plot(x,[y1 y2])
我切换到textscan,因为textread不支持自定义注释样式。我使用了'-'而不是'-'的注释样式,因为'-'将开始跳过负值

注意:此数据包含-99.99表示无效/缺失数据,因此您可能希望在打印前添加以下内容:

y1(y1==-99.99) = NaN;
y2(y2==-99.99) = NaN;

好的,我想我找到问题了。我怀疑你的数据中有一些无效的文本。我在网上搜索了一下,我想我找到了数据的副本

此数据集的结尾如下所示:

 2007      0.75      0.69
 2008      0.56      0.70
 2009      0.72    -99.99
 2010      0.83    -99.99
-------------------------
末尾的----行导致它出错

因此,我使用了以下方法:

fid = fopen('gl_land.txt','r');
C = textscan(fid,'%f %f %f','headerlines',30,'commentstyle','--');
fclose(fid);
x = C{1}; y1 = C{2} y2 = C{3};
plot(x,[y1 y2])
我切换到textscan,因为textread不支持自定义注释样式。我使用了'-'而不是'-'的注释样式,因为'-'将开始跳过负值

注意:此数据包含-99.99表示无效/缺失数据,因此您可能希望在打印前添加以下内容:

y1(y1==-99.99) = NaN;
y2(y2==-99.99) = NaN;


实际上,我不明白你的意思。你能在MSPaint中画一个例子并附在问题上吗?奥利答对了。我有很多值,这些值会产生很多向量,所以我无法手动校正它们(超过100个)。他的回答解决了我的问题,不过现在我需要跳过那30行。事实上,我不明白你的意思。你能在MSPaint中画一个例子并附在问题上吗?奥利答对了。我有很多值,这些值会产生很多向量,所以我无法手动校正它们(超过100个)。他回答的问题解决了我的问题,虽然现在我需要跳过那30行。我想这可以解决问题,但是你能告诉我怎么跳过那30行吗?不知为什么我真的做不到。同样的错误不断出现,我不知道该怎么办:???使用==>text扫描太多输出参数时出错。错误==>10[x y1 y2]处的测试对象=文本扫描('gl_land.txt','%f%f','headerlines',30)@你能提供你的文本文件的样本吗?数字列的格式或某些随机行上的无效字符可能会导致此问题。当您更改输出参数的数量时,它会做什么?这是什么意思?如何更改输出参数的数量?对不起,我对Matlab有点不了解。我想这可以解决问题,但是你能告诉我怎么跳过那30行吗?不知怎么的,我真的做不到。同样的错误不断出现,我不知道该怎么办:???使用==>text扫描太多输出参数时出错。错误==>10[x y1 y2]处的测试对象=文本扫描('gl_land.txt','%f%f','headerlines',30)@你能提供你的文本文件的样本吗?数字列的格式或某些随机行上的无效字符可能会导致此问题。当您更改输出参数的数量时,它会做什么?这是什么意思?如何更改输出参数的数量?对不起,我有点不了解Matlab你很好。你找到的信息比OP隐藏的要多。很好,谢谢,谢谢!!这对我的任务非常重要!:)这是因为——最后我无法得到这个数字,我还学习了如何从这些列的值中创建变量!你很好。你找到的信息比OP隐藏的要多。很好,谢谢,谢谢!!这对我的任务非常重要!:)这是因为——最后我无法得到这个数字,我还学习了如何从这些列的值中创建变量!