在matlab中绘制3d图形?

时间:2010-03-14 00:04:44

标签: matlab plot

我目前是初学者,我正在使用matlab进行数据分析。我有一个文本文件,第一行的数据格式如下: 时间;波高1;波高2; ....... 我有列,直到波高19和行总共4000行。

第一列中的数据是秒的时间。从第2列开始,以波高为单位,以米为单位。目前,我想请求matlab在x轴上绘制一个带有时间的三维图形,在y轴上绘制波形高度,以及对应于从1到19的波高数字的波形高度,即第2列第10行中的数据具有假设8m对应于第1列第10行的波高1和时间。

我尝试了以下内容:

clear;    
filename='abc.daf';    
path='C:\D';

a=dlmread([path '\' filename],' ', 2, 1);

[nrows,ncols]=size(a);

t=a(1:nrows,1);%define t from text file

for i=(1:20),    
   j=(2:21);    
end

wi=a(:,j);

for k=(2:4000),    
   l=k;    
end

r=a(l,:);

但每次我使用尝试绘制它们时,for循环wi工作正常,但对于r = a(l,:) ;,该情节只给我最后一次数据但我想要文件中的所有数据是情节。

有没有办法可以做到这一点。我很抱歉,因为它有点混乱,但如果有人能帮助我,我将非常感激。

谢谢!!!!!!!!!!

3 个答案:

答案 0 :(得分:0)

我不太了解你的功能是什么,例如,我没有看到任何情节命令。

以下是我根据您的规格尝试制作3D图表的方法:

%# Create some data - time from 0 to 2pi, ten sets of data with frequency 1 through 10.
%# You would just load A instead (I use uppercase just so I know that A is a 2D array, 
%# rather than a vector)
x = linspace(0,2*pi,100)';%#' linspace makes equally spaced points
w = 1:10;
[xx,ww]=ndgrid(x,w); %# prepare data for easy calculation of matrix A
y = ww.*sin(xx.*ww);
A = [x,y]; %# A is [time,data]

%# find size of A
[nRows,nCols] = size(A);

%# create a figure, loop through the columns 2:end of A to plot
colors = hsv(10);
figure,
hold on,

for i=1:nCols-1,

%# plot time vs waveIdx vs wave height
plot3(A(:,1),i*ones(nRows,1),A(:,1+i),'Color',colors(i,:)),

end

%# set a reasonable 3D view
view(45,60)

%# for clarity, label axes
xlabel('time')
ylabel('wave index')
zlabel('wave height')

答案 1 :(得分:0)

在您的代码中加载数据之后,变量a应该是一个4000 x 20的数组。然后,您可以通过几种不同的方式创建三维图。您可以使用函数PLOT3创建三维线图,为每列波形高程数据绘制一条线:

t = a(:,1);   %# Your time vector
for i = 2:20  %# Loop over remaining columns
  plot3(t,(i-1).*ones(4000,1),a(:,i));  %# Plot one column
  hold on;    %# Continue plotting to the same axes
end
xlabel('Time');            %# Time on the x-axis
ylabel('Wave number');     %# Wave number (1-19) on y-axis
zlabel('Wave elevation');  %# Elevation on z-axis

在3-D中绘制数据的另一种方法是分别使用函数MESHSURF制作网格或曲面图。这是一个例子:

h = surf(a(:,1),1:19,a(:,2:20)');  %'# Plot a colored surface
set(h,'EdgeColor','none');  %# Turn off edge coloring (easier to see surface)
xlabel('Time');             %# Time on the x-axis
ylabel('Wave number');      %# Wave number (1-19) on y-axis
zlabel('Wave elevation');   %# Elevation on z-axis

答案 2 :(得分:0)

或者,您可以尝试gnuplot。快速,免费且相对容易使用。我用它来为数百万行的数据集生成热图。