CDIP banner
CDIP banner recent historic documents
sub-menu
Documentation
 
FAQs & Summaries
Glossary
Publications
 
Introduction
  History and Funding
  Program Goals
Wave Measurement
  Wave Generation
  Wave Dynamics
  Irregular Waves
  Spectral Analysis
  Gauging Waves
  Hurricane Events
  Tsunami Events
Instrumentation
  Underwater Sensors
  Surface Buoys
  Meteorological
Data Acquisition
  System Organization
  Hardware
  Software
Data Processing
  System Organization
  Software
  Quality Control
Data Management
  Stations and Sets
  Files and Storage
CDIP Products
  Data Formats
  Web Products
  COOS Integration
  QARTOD
  Wave Eval Tool
  Metadata
  Custom Products
  NDBC XML/NWS Format
  NDBC Dial-A-Buoy
  Access Instructions
 
Related Links

ENERGY/DIRECTION MONTHLY VECTOR PLOT

Energy and direction spectrum data - derived from a fast fourier transform of approximately 30 minutes of wave data - wave data) is plotted with frequency on the x axis and time on the y axis. The length of a vector corresponds to the energy density (with scale to the right of the plot) and the wavefront direction is in the direction of the arrow. True North is at the top of the page. Every fourth data run is plotted.

Source Code:


%-------------------------------------------------------------------------------
% Name:
%   .dbase/web_programs/plotpro/matlab_scripts/feather.m
% Description:
%   Creates the monthly vector plot (feathers).
%   A few lines are pre-pended to this script.
% Called by:
%   .f90/plot_utils.make_plot
%-------------------------------------------------------------------------------


path(path,'/project/dbase/web_programs/plotpro/matlab_scripts');

wkg = wkg_path;

% give short names for loaded variables.
% NOTE: x = frequency data, y = energy density data, z = direction

eval(['freq=load(''',wkg,'freq.',pid,'01'');']);
eval(['ener=load(''',wkg,'ener.',pid,'01'');']);
eval(['dire=load(''',wkg,'dire.',pid,'01'');']);

x = freq(1,:);
y = ener;
z = dire;

% check to see if we have data
if ~ (any(x>0) & any(y>0) & any(z>0)) 
  unix(['\rm ',wkg,'plot_',pid,'*']); % for pp when run mountain with archive.
  clear all;
  quit;
end

dt = read_date_file([pid,'01'],wkg);
tim = dt.day + (dt.hour + dt.min/60)/24; % in days

yearchar = num2str(dt.year(1));
monthnum = dt.month(1);

clear freq ener date

% set energy to zero where direction is -1
I = find(z<0);
y(I) = 0;
clear I;

% set figure location on paper 
ppleft = .05;
ppbottom = .05;
ppwidth = .9;
ppheight = .93;

% set figure window
figure('units','normal','paperunits','normal', 'position',[.1,.1,.5,.8], ...
                      'paperposition',[ppleft,ppbottom,ppwidth,ppheight],'visible','off');

% to get arrow directions right get paper dimensions
xpage = 8.5;
ypage = 11;

% setup axes for text outside the plot region
tah = axes('position',[0 0 1 1],'visible','off');

% setup axes for data plot.
axleft = 0.1;
axbottom = 0.1;
axwidth = 0.7;
axheight = 0.76;
dah = axes('position',[axleft, axbottom, axwidth, axheight],'visible','off');

% setup plot scale parameters.
uxlim = 0.25;
lxlim = 0.04;
uylim = 33;
lylim = 1;

sy= size(y);
sz= size(z);

% get date information and index I for first of every
% day and every six hours.
pday = 0;
ptime = 0;
j=1;
k=1;
for i=1:sz(1)
  if ( (dt.day(i) ~= pday) | (tim(i) - ptime > 5/24))
    pday = dt.day(i);
    ptime = tim(i);
    I(k) = i;
    k = k + 1;
  end
end


% relate paper dimensions to axes scales
J = find( x<=uxlim & x >= lxlim);
Imin = min(J);
Imax = max(J);
xscale =  ( Imax - Imin )/(xpage*ppwidth*axwidth);
%xscale =  ( uxlim - lxlim )/(xpage*ppwidth*axwidth);
yscale =  ( uylim - lylim )/(ypage*ppheight*axheight);

% remove records not used
y = y(I,J);
ymax = max(max(y));
z = z(I,J);
tim = tim(I);
clear I;

%-------------------------------------------------------------------------------
%-- PLOT VECTORS ---------------------------------------------------------------
%-------------------------------------------------------------------------------

stretch = 7;
%ymax=30.;  % Use for fixed scale
%stretch = 0;
[u,v]=pol2cart(-1*(z+90)*(2*pi/360),y./ymax);
quiver(J,tim,xscale.*u,yscale.*v,stretch);


% LABEL X AXIS

numticks = 5;
diff = floor((Imax - Imin)/(numticks-1));
xt = Imin + (0:(numticks-1))*diff;
fxtl = num2str(x(xt)',2);
pxtl = num2str(1./x(xt)',2);
set(gca,'xlim',[Imin,Imax],'xtick',xt,'xticklabel',fxtl);
text(xt,-.5*ones(1,numticks),pxtl,'horizontalalignment','center');
text(Imax+.5,0.5,'Frequency (Hz)','horizontalalignment','left',...
     'fontsize',10);
text(Imax+.5,-.37,'Period (s)','horizontalalignment','left',...
     'fontsize',10);
 

% LABEL Y AXIS

ylabel('Day of Month (UTC)','fontsize',12);
set(gca,'ylim',[lylim,uylim],'ytick',[lylim:uylim-2],...
   'yticklabel',num2str([lylim:uylim-2]'));


% GET STATION INFO

info = read_info_file([pid,'01'],wkg);


% WRITE STATION INFO ON PLOT

set(gcf,'currentaxes',tah);

text(.45,.955,[info.stnid,' ',info.stname],'horizontalalignment',...
  'center','fontsize',14);

stream_name = ['(',char(info.stream_name),')'];
if ( length(stream_name) > 5 )
  text(.45, .932, stream_name, 'horizontalalignment',...
  'center','fontsize',12);
end

text(.45,.903,'ENERGY/DIRECTION SPECTRUM','horizontalalignment',...
  'center','fontsize',14);

mname = get_monthname(monthnum,'long');
text(.45,.883,[char(mname),' ',yearchar],'horizontalalignment',...
  'center','fontsize',14);



% PUT SCALE ON FIGURE

plotmax = 0.197; % magic number: length of ymax (inches) on plot per unit of stretch

ymaxlength = plotmax*stretch; % length in inches of ymax on plot
%ymaxlength = plotmax; % use for fixed scale

scalelength = 2; % desired approximate length of scale in inches

ytop = ymax*scalelength/ymaxlength;

if ytop < .1
  rndval = .01;
elseif ytop < 1
  rndval = .1;
elseif ytop < 10
  rndval = 1;
else  
  rndval = 10;
end

scaleytop = rndval*round(ytop/rndval); % top value on scale

% y scale height in normalized units

yscaleheight = (scalelength/ypage)*(scaleytop/ytop);

axes('position',[.870,.60,.05,yscaleheight]);

hold on; 
 

%draw the scale line (4 units long)
ytick = [0,scaleytop/4,scaleytop/2,3*scaleytop/4,scaleytop];
yticklabs = num2str(ytick',4);
feather(0,scaleytop);
hold on;
set(gca,'ylim',[0,scaleytop],'ytick',ytick,'yticklabel',yticklabs,'xticklabel',[]);
xlim=get(gca,'xlim');
ylim=get(gca,'ylim');
xtext = (xlim(2)-xlim(1))/7 + xlim(2);
text(xtext,ytop/2,'Energy Density (m^2/Hz)','rotation',90, ...
  'horizontalalignment','center','fontsize',12);
text((xlim(2)-xlim(1))/2 + xlim(1), ylim(2) + ylim(2)/5,...
  'TRUE','horizontalalignment','center','fontsize',12);
text((xlim(2)-xlim(1))/2 + xlim(1), ylim(2) + ylim(2)/10,...
  'NORTH','horizontalalignment','center','fontsize',12);

blue_box(0.01)

% Print the plot

%saveas(gcf,'/home/corey/feather.fig')

set(gcf, 'visible','off');
png_name = [wkg,'plot_',pid,'.png'];
print('-dpng','-r75',png_name);


quit

CDIP's major funding contributors are the US Army Corps of Engineers and the California Department of Boating and Waterways.
Official UCSD Web Page