www.gusucode.com > mbcguitools 工具箱 matlab 源码程序 > mbcguitools/@mvgraph3d/private/pr_plot.m
function pr_plot(gr) %PR_PLOT Private function % This is a private graph3d 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'); if ~isempty(data) nonnandata = ~any(isnan(data(:, [x y z])), 2); xdata = data(nonnandata,x); ydata = data(nonnandata,y); zdata = data(nonnandata,z); else xdata = []; ydata = []; zdata = []; 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 tp = ud.type; switch lower(tp) 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)) = 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) edges = mn:((mx-mn)/n):mx; [nul,bin]=histc(zdata,[-inf edges(2:end-1) inf]); % reshape cmap ready. cdata=cmap(bin(:),:); set(gr.surf,'Faces',tri,'Vertices',[xdata(:) ydata(:) zdata(:)],'FaceVertexCData',cdata,... '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 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) edges = mn:((mx-mn)/n):mx; [nul,bin]=histc(zdata,[-inf edges(2:end-1) inf]); % reshape cmap ready. cdata=cmap(bin(:),:); switch lower(tp) case 'mesh' set(gr.surf,'Faces',tri,'Vertices',[xdata(:) ydata(:) zdata(:)],'FaceVertexCData',cdata,... 'FaceColor','none','EdgeColor','interp',... 'FaceLighting', 'none', 'EdgeLighting', 'flat',... 'Marker','none'); case 'surface' set(gr.surf,'Faces',tri,'Vertices',[xdata(:) ydata(:) zdata(:)],'FaceVertexCData',cdata,... '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{z},'Interpreter','none'); gr.DataPointer.info = ud;