📄 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: December 14, 2005: Bug fix in trace selection%% 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 % EXAMPLE% seismic=s_data;% s_iplot(seismic,{'direction','r2l'},{'deflection',1})global ABORTEDif ~istype(seismic,'seismic') if isnumeric(seismic) seismic=s_convert(seismic,1,1); seismic.units='Samples'; else error('First input argument must be seismic dataset or a matrix.') endendaux=[];ABORTED=logical(0);run_presets_if_neededntr=size(seismic.traces,2);% Set default valuesparam.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 argumentsparam=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 scrollbarselse figure_handle=gcf; if isempty(param.tracking) param.tracking='no'; endendif nargout > 0 aux.figure_handle=figure_handle;ends_wplot_no1(seismic,param)% Create structure "userdata" to save info that allows one to % interactively modify the seismic plotif 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) % Set menu button for plot parametersendif nargout == 0 clear auxend%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%function s_wplot_no1(seismic,param)global ABORTED S4Mif isempty(S4M) presets S4M.script=''; S4M.plot_label='';endhistory=S4M.history; % Preserve value of global variable S4M.historyS4M.history=0;if ~isempty(param.traces) if ~iscell(param.traces) 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);endif ~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);endS4M.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 endend[nsamp,ntr]=size(seismic.traces);if nsamp*ntr == 0 disp([' Alert from "s_iplot": Data set "',seismic.name,'" has no traces to plot']) returnend% Set indices of trace headers for annotationif isempty(param.aindex) indices=1:max([round(ntr/7),1]):ntr;else indices=param.aindex(param.aindex > 0 & param.aindex <= ntr);endif 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 returnend% Change polarity if requestedif param.polarity < 0 seismic.traces=-seismic.traces;end% Interpolate data if necessaryif (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') & S4M.matlab_version >= 7 % 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);
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -