📄 s_iplot.m
字号:
function aux=s_iplot(seismic,varargin)
% Function plots seismic data in wiggle-trace form.
% By default, positive deflections are filled black.
%
% Written by: E. R.: April 15, 2000
% Last updated: November 4, 2005; Turn off warning regarding NaN in seismic trace
%
% aux=s_iplot(seismic,varargin)
% INPUT
% seismic seismic structure
% varargin one or more cell arrays; the first element of each cell
% array is a keyword, the other elements are parameters.
% Presently, keywords are:
% 'annotation' 2-element or 3-element cell array. Defines a header
% mnemonic whose values are used to annotate the horizontal axis.
% Default: {'annotation','trace_no'}
% 'aindex annotation index; used to annotate specific traces with the
% value of the header selected via keyword annotation.
% EXAMPLE {'aindex',5:10:1000} every tenth trace annotated,
% starting with trace 5
% Default: {'aindex',[]} automatic annotation
% 'deflection' trace deflection in units of trace spacing.
% Default: ('deflection',1.25}
% 'direction' 2-element cell array defining plot direction. Possible
% values are: left-to-right, 'l2r', and right-to-left, 'r2l'.
% Default: {'direction','l2r')
% 'figure_only' specifies if only a figure window should be created;
% possible values: 'yes', 'no'.
% Default: {'figure_only','no'}
% 'figure' Specifies if new figure should be created or if the seismic
% traces should be plotted to an existing figure. Possible values
% are 'new' and any other string.
% Default: {'figure','new'}
% 'interpol' 2-element cell array which specifies how data should be
% interpolated in time. Possible values are 'linear', 'cubic',
% and 'v5cubic'.
% 'cubic' - piecewise cubic Hermite interpolation
% 'v5cubic' - the cubic interpolation from MATLAB 5, which does not
% extrapolate and uses 'spline' if X is not equally spaced.
% Default: {'interpol','v5cubic'}
% 'orient' Plot orientation. Possible values are: 'portrait' and 'landscape'
% Default: {'orient','landscape'} for more than 10 traces
% {'orient','portrait'} for fewer than 11 traces
% 'peak_fill' 2-elementcell array which specifies color of peak fill. Possible values are
% all permissible colors or the empty string. In the latter case peaks are not filled.
% Default: {'peak_fill','k'}
% 'pixels' 2-element cell array. Minimum number of interpolation points to use for display.
% The greater the number the smoother the display if 'interpol' is 'cubic'.
% Default: {'pixels',200}
% 'polarity' 2-element cell array. Possible values are 1 and -1;
% Default: {'polarity',1}
% 'quality' 2-element cell array. Possible values are 'draft' and 'high'
% 'draft' quality (default) is faster and intended for screen and b/w hardcopies;
% 'high' quality is for color copies (there is no difference between
% 'draft' and 'high' quality for screen displays and b/w copies).
% Default: {'quality','draft'}
% 'scale' 2-element cell array which specifies if traces should be scaled individually.
% Possible values are 'yes', 'no', or the actual scale. This may be a scalar or a
% vector whose number of elements is equal to the number of traces.
% separation. The scale actually used must be obtained by specifying the output
% argument "aux".
% Default: {'scale','yes'}
% 'spacing' 2-element cell array which specifies if traces should be
% equidistant ('equal') or nonuniformly ('nonequal') spaced;
% in the latter case the header mnemonic used for annotation defines
% the trace-to-trace separation.
% Default: {'spacing','equal'}
% 'times' 2-element or 3-element cell array
% {'times',vector of first and last time to plot} or ('times',first,last}.
% Default: {'times',seismic.first,seismic.last} which is
% equivalent to {'times',[seismic.first,seismic.last]}
% 'title' 2-element cell array consisting of the keyword 'title' and a title string;
% no title is plotted if the title string is empty.
% Default: {'title',inputname(1)) where inputname(1) is the name of the seismic
% input data set
% 'traces' 2-element or 3-element cell array. The second element can be an array of
% trace numbers or it can be a string. If it is a string it can be a header
% mnemonic or it can contain a logical expression involving header values to
% include. A "pseudo-header" 'trace_no' can also be used.
% If the second element is a string containing a header mnemonic there must
% be a third element containing a vector of values. (see "s_select")
% Default: {'traces',[]} which is equivalent to
% {'traces',1:ntr} where ntr denotes the number of traces in the
% input data set (ntr = size(seismic.traces,2))
% 'tracking' track curor; possible values are 'yes' and 'no'
% Default: {'tracking','yes'} if parameter 'figure' == 'new'
% Default: {'tracking','no'} if parameter 'figure' == 'old'
% 'trough_fill' 2-element cell array which specifies color of trough fill.
% Possible values are all permissible colors or the empty string.
% In the latter case troughs are not filled.
% Default: {'trough_fill',''}
% 'wiggle' 2-element cell array which specifies color of wiggles.
% Possible values are all permissible colors or the empty string.
% In the latter case wiggles are not plotted.
% Default: {'wiggle','k'}
%
% OUTPUT
% aux optional structure with scale factor(s) used (required if seismic
% data are to be ploted with the same scaling in different plots)
% 'scale' field with scale factor(s) used
% 'figure_handle' handle of the figure with the plot
global ABORTED
aux=[];
ABORTED=logical(0);
if ~isstruct(seismic)
seismic=s_convert(seismic,1,1);
seismic.units='Samples';
end
ntr=size(seismic.traces,2);
% Set default values
param.annotation='trace_no';
param.aindex=[];
param.deflection=1.25;
param.direction='l2r';
param.figure='new';
param.figure_only='no';
param.first=1;
param.inc=[];
param.interactive=1;
param.interpol='v5cubic';
param.orient=[];
param.peak_fill='k';
param.pixels=500;
param.polarity=1;
param.quality='draft';
param.scale='yes';
param.spacing='equal';
param.times=[];
param.title=seismic.name;
param.traces=[];
param.tracking=[];
param.trough_fill='none';
param.wiggle='k';
param.wiggle_width=0.5;
% Decode and assign input arguments
param=assign_input(param,varargin,'s_iplot');
% Create figure window (unless an existing figure is to be used)
if strcmpi(param.figure,'new')
if isempty(param.tracking)
param.tracking='yes';
end
if isempty(param.orient)
if ntr > 10
param.orient='landscape';
else
param.orient='portrait';
end
end
if strcmpi(param.orient,'landscape')
figure_handle=lfigure;
else
figure_handle=pfigure;
end
figure_export_menu(figure_handle); % Create menu button to export figure as emf/eps file
pause(0)
wseismic_scrollbar_menu(figure_handle,seismic,param.direction) % Create scrollbars
else
figure_handle=gcf;
if isempty(param.tracking)
param.tracking='n';
end
end
if nargout > 0
aux.figure_handle=figure_handle;
end
s_wplot_no1(seismic,param)
% Create structure "userdata" to save info that allows one to
% interactively modify the seismic plot
if param.interactive & strcmp(param.figure,'new')
haxis=gca;
userdata=get(figure_handle,'UserData');
userdata.seismic=seismic;
userdata.param=param;
userdata.axis_handle=haxis;
set(figure_handle,'UserData',userdata,'DoubleBuffer','on')
menu2edit_seismic(figure_handle)
end
if nargout == 0
clear aux
end
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
function s_wplot_no1(seismic,param)
global ABORTED S4M
history=S4M.history; % Preserve value of global variable S4M.history
S4M.history=0;
if ~isempty(param.traces)
if length(param.traces) <= 1
seismic=s_select(seismic,{'traces',param.traces});
else
seismic=s_select(seismic,{'traces',param.traces{1},param.traces{2}});
end
% ntr=size(seismic.traces,2);
end
if ~isempty(param.times)
if length(param.times) <= 1
seismic=s_select(seismic,{'times',param.times});
elseif iscell(param.times)
seismic=s_select(seismic,{'times',param.times{1},param.times{2}});
else
seismic=s_select(seismic,{'times',param.times(1),param.times(2)});
end
% nsamp=size(seismic.traces,1);
end
S4M.history=history;
annotation=s_gh(seismic,param.annotation);
if length(annotation) == 1
uniform=logical(1);
annotlog=logical(0);
else
ddd=diff(annotation);
annotlog=(max(ddd)==min(ddd)) & ddd(1) ~= 0 & isempty(param.aindex);
if annotlog
uniform=logical(0);
else
if strcmp(param.spacing,'equal')
uniform=logical(1); % Uniform trace-to-trace distance
else
uniform=logical(0);
end
end
end
[nsamp,ntr]=size(seismic.traces);
if nsamp*ntr == 0
disp([' Alert from "s_iplot": Data set "',seismic.name,'" has no traces to plot'])
return
end
% Set indices of trace headers for annotation
if isempty(param.aindex)
indices=1:max([round(ntr/7),1]):ntr;
else
indices=param.aindex(param.aindex > 0 & param.aindex <= ntr);
end
if nsamp <= 1
ABORTED=logical(1);
if param.interactive
msgdlg(' Only one sample per trace; seismic data set is not plotted.')
else
disp([' Only one sample per trace; s_iplot did not plot data set "',seismic.name,'"'])
end
return
end
% Change polarity if requested
if param.polarity < 0
seismic.traces=-seismic.traces;
end
% Interpolate data if necessary
if (strcmpi(param.interpol,'v5cubic') | strcmpi(param.interpol,'cubic')) & nsamp < param.pixels
if isfield(seismic,'null') & isnan(seismic.null)
for ii=1:ntr % Replace last NaN at the top and first NaN at the bottom by zero
idx=find(~isnan(seismic.traces(:,ii)));
if ~isempty(idx)
if idx(1) > 1
seismic.traces(idx(1)-1,ii)=0;
end
if idx(end) < nsamp
seismic.traces(idx(end)+1,ii)=0;
end
end
end
end
npix=round(param.pixels/(nsamp-1))*(nsamp-1);
dti=(seismic.last-seismic.first)/npix;
times=(seismic.first:dti:seismic.last)';
if isfield(seismic,'null') % Turn off warnings caused by NaN's in seismic traces
warning('off','MATLAB:interp1:NaNinY')
yi=interp1(seismic.first:seismic.step:seismic.last,seismic.traces,times,param.interpol);
warning('on','MATLAB:interp1:NaNinY')
else
yi=interp1(seismic.first:seismic.step:seismic.last,seismic.traces,times,param.interpol);
end
else
% dti=seismic.step;
times=(seismic.first:seismic.step:seismic.last)';
yi=seismic.traces;
end
trace_max=max(abs(yi));
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -