построение 3D-графика в Matlab? - PullRequest
0 голосов
/ 14 марта 2010

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

Данные в первом столбце - это время во втором. Начиная со 2-го столбца это высота волны в метрах. В настоящее время я хотел бы попросить matlab построить трехмерный график со временем по оси x, высотой волны по оси y и высотой волны, которые соответствуют числу высоты волны от 1 до 19, то есть данные в столбце 2 строки 10 имеют скажем, 8 м, что соответствует высоте волны 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,:);

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

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

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

Ответы [ 3 ]

0 голосов
/ 14 марта 2010

После того, как вы загрузите свои данные, как вы делаете в своем коде над переменной, a должен быть массивом 4000 на 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

Другой способ нанести ваши данные в трехмерном режиме - это создать сетку или график поверхности, используя функции 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 голосов
/ 15 марта 2010

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

0 голосов
/ 14 марта 2010

Я не совсем понимаю, что делает ваша функция, например, я не вижу никакой команды сюжета.

Вот как я бы попытался сделать 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')
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...