声振论坛

 找回密码
 我要加入

QQ登录

只需一步,快速开始

查看: 1612|回复: 9

[综合讨论] matlab中如何保留空行进行绘图?!

[复制链接]
发表于 2012-2-24 15:42 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。

您需要 登录 才可以下载或查看,没有账号?我要加入

x
我有一个数据文件a.dat,总共100行。
每隔10行数据之后,保留一空行。
现在我需要用这个文件进行绘图,但绘图的时候我要保留空行,怎么办?
因为刚才用数据直接绘图的话,matlab貌似自动就把空行给略掉了。
回复
分享到:

使用道具 举报

发表于 2012-2-24 22:13 | 显示全部楼层
回复 1 # 鸭鸭112 的帖子

空行补零成么
发表于 2012-2-25 00:36 | 显示全部楼层
...绘图的时候我要保留空行...

什麼意思?
 楼主| 发表于 2012-2-25 12:35 | 显示全部楼层
附件的图片,是我用同样的数据,但用别的软件绘制的图,是对的。
但我用matlab,用同样的数据,结果却是错的。我的代码如下:
A=load('D:\Program Files\MATLAB\test.dat');
   x=A(:,1);
   y=A(:,2);
   z=A(:,3);
   plot3(x,y,z)
我觉得里面应该加一些条件,如:
如果遇到空行,则自动跳过,可是应该怎么写呢?请高手指点!

A.jpg

test.dat

1.41 KB, 下载次数: 3

发表于 2012-2-26 00:25 | 显示全部楼层
个人水平有限, 真看不清LZ确实要什麼!? 仅猜测
  1. clc;clear
  2. A=load('test.dat');
  3. A(4:4:size(A,1),:)=[];x=A(:,1);y=A(:,2);z=A(:,3);
  4. tri=reshape(1:size(A,1),3,[])';trisurf(tri,x,y,z)
复制代码
若一定依LZ原本思路
  1. clc;clear
  2. A=load('test.dat'); [m,n]=size(A);
  3. b=ones(m*5/4,n)*nan;
  4. pp=reshape(1:m*5/4,5,[]); pp=pp(1:4,:); pp=pp(:); b(pp,:)=A;
  5. x=b(:,1);y=b(:,2);z=b(:,3);
  6. plot3(x,y,z)
复制代码

评分

1

查看全部评分

 楼主| 发表于 2012-2-27 09:21 | 显示全部楼层
哇塞,非常感谢ChaChing ,不愧为元老,ok啦,\
再次感谢,学习了.
01.clc;clear
02.A=load('test.dat'); [m,n]=size(A);
03.b=ones(m*5/4,n)*nan;
04.pp=reshape(1:m*5/4,5,[]); pp=pp(1:4,:); pp=pp(:); b(pp,:)=A;
05.x=b(:,1);y=b(:,2);z=b(:,3);
06.plot3(x,y,z)
 楼主| 发表于 2012-2-27 10:02 | 显示全部楼层
说实在的,可以用了.但好像不是很明白.能麻烦您给个注释吗?
 楼主| 发表于 2012-2-27 11:26 | 显示全部楼层
我挨着查,但好像还不是很明白,
A=load('test1.dat'); [m,n]=size(A); % 输出矩阵A的大小,m=2800,n=3
b=ones(m*5/4,n)*nan;    % b为新矩阵,所有值为NAN,size(b)结果是:m1=3500,n1=3
pp=reshape(1:m*5/4,5,[]); %pp为重整后矩阵,size(pp)结果是:m2=5,n2=875
pp=pp(1:4,:);   % 只取1:4行的数据,size(pp)结果是:m3=4,n3=875
pp=pp(:);      %pp变成一个一维数组,size(pp)结果是:m4=4375,n4=1
b(pp,:)=A;
x=b(:,1);y=b(:,2);z=b(:,3);
plot3(x,y,z)

为什么用m*5/4?
发表于 2012-2-28 14:15 | 显示全部楼层
回复 8 # 鸭鸭112 的帖子
pp=reshape(1:m*5/4,5,[]); %pp为重整后矩阵,size(pp)结果是:m2=5,n2=875
LZ寫錯了吧! 應該n2=700?

为什么用m*5/4?
LZ的test.data的資料不是4行空一行(即要有5行), pp說穿僅是要把A矩陣塞對在b的位置而已
沒優化, 只想可畫即可, 當然需視不同資料格式有所調整!
或許將
  1. pp=reshape(1:m*5/4,5,[]); pp=pp(1:4,:); pp=pp(:); b(pp,:)=A;
复制代码
改為下式, 比較明白
  1. pp=1:m*5/4; pp([5:5:end])=[]; b(pp,:)=A;
复制代码
 楼主| 发表于 2012-2-28 14:33 | 显示全部楼层
回复 9 # ChaChing 的帖子

再次感谢, 是的,我写错了.
n2=n3=700, m4=2800.
已经明白了是怎么回事,非常感谢。如果有时间,麻烦帮我看看那个生成gif动画的问题,可以吗?我试了很多次了,就是不行。生成的不是动画,而是一张静态图。
您需要登录后才可以回帖 登录 | 我要加入

本版积分规则

QQ|小黑屋|Archiver|手机版|联系我们|声振论坛

GMT+8, 2024-12-26 02:47 , Processed in 0.124022 second(s), 22 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

快速回复 返回顶部 返回列表