⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 s_iplot.m

📁 基于Matlab的地震数据处理显示和测井数据显示于处理的小程序
💻 M
📖 第 1 页 / 共 2 页
字号:
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 + -