2010-03-14 3 views
0

В настоящее время я начинаю, и я использую Matlab для анализа данных. У меня есть текстовый файл с данными в первой строке, отформатирован следующим образом: время, высота волны 1; высота волны 2; ....... У меня есть столбец до высоты волны 19 и строк всего 4000 строк.график 3d графика в Matlab?

Данные в первом столбце - это время во втором. Начиная с второй колонки, это высота высоты волны, которая находится в метрах. В настоящий момент мне нравится просить Matlab построить трехмерную диаграмму со временем по оси x, возвышение волны по оси y и высоту волны, которая соответствует номеру высоты волны от 1 до 19, то есть данные в столбце 2 строки 10 имеют скажу ому что соответствует высоте волны 1 и времени в колонке 1 строка 10.

меня попробовать следующее:

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,:); 

Но каждый раз, когда я использую попытаться построить их, для цикла Wi работ отлично, но для r = a (l, :) ;, график только либо дает мне данные только в последний раз, но я хочу, чтобы все данные в файле были застроены.

Есть ли способ, которым я могу это сделать. Мне жаль, потому что это немного запутанно, но я буду очень благодарен, если кто-нибудь сможет мне помочь.

Спасибо !!!!!!!!!!

ответ

0

После того, как вы загрузите ваши данные, как вы делаете в коде выше вашей переменной a должен быть 4000-по-20 массив. Затем вы могли бы создать трехмерный сюжет несколькими способами. Вы можете создать линейный график 3-D с помощью функции 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 
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') 
0

Или вы могли бы попробовать gnuplot. Быстрый, свободный и относительно простой в использовании. Я использую его для создания карт тепла для наборов данных в миллионах строк.

Смежные вопросы