我目前是初学者,我正在使用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,:) ;,该情节只给我最后一次数据但我想要文件中的所有数据是情节。
有没有办法可以做到这一点。我很抱歉,因为它有点混乱,但如果有人能帮助我,我将非常感激。
谢谢!!!!!!!!!!
答案 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中绘制数据的另一种方法是分别使用函数MESH或SURF制作网格或曲面图。这是一个例子:
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。快速,免费且相对容易使用。我用它来为数百万行的数据集生成热图。