www.gusucode.com > mbcguitools 工具箱 matlab 源码程序 > mbcguitools/@mvgraph4d/private/pr_plot.m
function pr_plot(gr) %GPR_PLOT Private function % This is a private graph4d function used to plot data % Copyright 2000-2010 The MathWorks, Inc. and Ford Global Technologies, Inc. ud = gr.DataPointer.info; data = ud.data; labels = get(gr.xfactor,'String'); if ~iscell(labels) labels={labels}; end x=get(gr.xfactor,'Value'); y=get(gr.yfactor,'Value'); z=get(gr.zfactor,'Value'); c=get(gr.cfactor,'Value'); if ~isempty(data) nonnandata = ~any(isnan(data(:, [x y z c])), 2); xdata = data(nonnandata,x); ydata = data(nonnandata,y); zdata = data(nonnandata,z); cdata = data(nonnandata,c); else xdata = []; ydata = []; zdata = []; cdata = []; end if isempty(xdata) set(gr.surf,'Faces',1,'Vertices',[0 0 0],'FaceVertexCData',0,... 'FaceColor','none','Marker','none'); if ud.datatags % Remove all tags ud.datataghandles = mbctagdata([], {}, gr.axes, ud.datataghandles, 'off', 'simple'); end else % if range limiter is checked, need to reduce all data here if get(gr.colorbar.userange,'Value') cmax = ud.rangepositions(3); cmin = ud.rangepositions(1); % convert to actual units ylim=get(gr.colorbar.axes,'YLim'); clim=get(gr.axes,'CLim'); cmax=clim(1)+(clim(2)-clim(1))*(cmax-ylim(1))/(ylim(2)-ylim(1)); cmin=clim(1)+(clim(2)-clim(1))*(cmin-ylim(1))/(ylim(2)-ylim(1)); inds=find(cdata<=cmax & cdata>=cmin); xdata=xdata(inds); ydata=ydata(inds); zdata=zdata(inds); cdata=cdata(inds); % inds is also used later on for the data tags end switch lower(ud.type) case 'scatter' Npts = length(xdata); tri = zeros(3, ceil(Npts/3)); tri(1:Npts) = 1:Npts; if numel(tri)>Npts tri(Npts+1:numel(tri)) = 1:(numel(tri)-Npts); end tri = tri.'; % set colours for colorbar clim=get(gr.axes,'CLim'); cmap=get(gr.colorbar.bar,'FaceVertexCData'); n=size(cmap,1); mn=clim(1);mx=clim(2); % work out cdata - needs to be one for each vertex (zdata) if ~isempty(cdata) edges = mn:((mx-mn)/n):mx; [nul,bin]=histc(cdata,[-inf edges(2:end-1) inf]); bin(bin==0)=1; else bin=[]; end % reshape cmap ready. coldata=cmap(bin(:),:); if ~isempty(cdata) vert=[xdata(:) ydata(:) zdata(:)]; else vert=[]; end if size(vert,1)==1 vert=[vert;vert;vert]; tri=[1 2 3]; coldata=[coldata;coldata;coldata]; elseif size(vert,1)==2 vert(end+1,:)=vert(1,:); tri=[1 2 3]; coldata(end+1,:)=coldata(1,:); end set(gr.surf,'Faces',tri,'Vertices',vert,'FaceVertexCData',coldata,... 'FaceColor','none','EdgeColor','none',... 'FaceLighting', 'none', 'EdgeLighting', 'none',... 'Marker','o','MarkerEdgeColor','flat','MarkerFaceColor','flat'); if ud.datatags % Update tags tol = [0 0 0]; axlim = get(gr.axes, 'XLim'); tol(1) = (axlim(2)-axlim(1))./250; axlim = get(gr.axes, 'YLim'); tol(2) = (axlim(2)-axlim(1))./250; axlim = get(gr.axes, 'ZLim'); tol(3) = (axlim(2)-axlim(1))./250; if ud.datatags==1 || ud.datatags==2 sTags = pr_getDataTags(gr); if get(gr.colorbar.userange,'Value') % remove tags for data that isn't displayed sTags = sTags(inds); end if length(sTags)==length(xdata) ud.datataghandles = mbctagdata([xdata(:) ydata(:) zdata(:)], sTags, ... gr.axes, ud.datataghandles, 'off', 'pointoverlap', tol); else ud.datataghandles = mbctagdata([], {}, gr.axes, ud.datataghandles, 'off', 'simple'); end else ud.datataghandles = mbccountedtagdata([xdata(:) ydata(:) zdata(:)], ... gr.axes, ud.datataghandles, 'off', tol); end end otherwise if length(xdata)>3 try tri=convhulln([xdata(:) ydata(:) zdata(:)]); catch try tri=convhulln([xdata(:) ydata(:) zdata(:)], {'QJ','Qt','Qbb','Qc','QbB','Pp'}); catch tri=[]; end end else tri=[]; end % set colours for colorbar clim=get(gr.axes,'CLim'); cmap=get(gr.colorbar.bar,'FaceVertexCData'); n=size(cmap,1); mn=clim(1);mx=clim(2); % work out cdata - needs to be one for each vertex (zdata) if ~isempty(cdata) edges = mn:((mx-mn)/n):mx; [nul,bin]=histc(cdata,[-inf edges(2:end-1) inf]); bin(bin==0)=1; else bin=[]; end % reshape cmap ready. coldata=cmap(bin(:),:); if ~isempty(cdata) vert=[xdata(:) ydata(:) zdata(:)]; else vert=[]; end if size(vert,1)==1 vert=[vert;vert;vert]; tri=[1 2 3]; coldata=[coldata;coldata;coldata]; elseif size(vert,1)==2 vert(end+1,:)=vert(1,:); tri=[1 2 3]; coldata(end+1,:)=coldata(1,:); end switch lower(ud.type) case 'mesh' set(gr.surf,'Faces',tri,'Vertices',vert,'FaceVertexCData',coldata,... 'FaceColor','none','EdgeColor','interp',... 'FaceLighting', 'none', 'EdgeLighting', 'flat',... 'Marker','none'); case 'surface' set(gr.surf,'Faces',tri,'Vertices',vert,'FaceVertexCData',coldata,... 'FaceColor','interp', ... 'EdgeColor',get(mbcgui.hgclassesutil.toNative(gr.axes),'DefaultSurfaceEdgeColor'),... 'Marker','none'); end if ud.datatags % Data tags not supported in mesh/surface mode at the moment ud.datataghandles = mbctagdata([], {}, gr.axes, ud.datataghandles, 'off', 'simple'); end end set(gr.axes,'CameraPositionMode','auto','CameraTargetMode','auto'); end % set axis labels lbls=get(gr.axes,{'XLabel';'ylabel';'zlabel'}); set([lbls{:}],{'String'},labels([x; y; z]),'Interpreter','none'); lbls=get(gr.colorbar.axes,'Title'); set(lbls,{'String'},labels(c),'Interpreter','none'); gr.DataPointer.info = ud;