MATLAB 颜色图函数(imagesc/scatter/polarPcolor/pcolor)
2维的热度图 imagesc
imagesc(x, y, z),x和y分别是横纵坐标,z为值,表示颜色
imagesc(theta,phi,slc); colorbar xlabel('theta(°)','fontname','Times New Roman','FontSize',14); ylabel('phi(°)','fontname','Times New Roman','FontSize',14); sta = '3 objects at (θ,φ,r) : (-30,30,1) (0,0,2) (60,-60,0.5)'; str=sprintf(strcat('3D Imaging Slice at :', num2str(d_max*D/N), '(m)', '\n',sta)); title(str, 'fontname','Times New Roman','Color','k','FontSize',13); grid on
其中,colorbar的坐标值调整:caxis([0 1]);
colormap的色系调整:colormap hot
3维散点图 scatter
scatter3(x,y,z,24,c,'filled'); % axis([-(R+2) (R+2) -(R+2) (R+2) 0 (h+2)]); colorbar
2维 极坐标热度图 polarPcolor
polarPcolor(R_axis, theta, value),前两个为半径方向坐标轴和圆心角坐标轴,value为值,用颜色表示
[fig, clr] = polarPcolor(R_axis, theta, x_d_th, 'labelR','range (m)','Ncircles', 5,'Nspokes',7); colormap hot % caxis([0 1]);
其中polarPcolor代码如下:
function [varargout] = polarPcolor(R,theta,Z,varargin) % [h,c] = polarPcolor1(R,theta,Z,varargin) is a pseudocolor plot of matrix % Z for a vector radius R and a vector angle theta. % The elements of Z specify the color in each cell of the % plot. The goal is to apply pcolor function with a polar grid, which % provides a better visualization than a cartesian grid. % %% Syntax % % [h,c] = polarPcolor(R,theta,Z) % [h,c] = polarPcolor(R,theta,Z,'Ncircles',10) % [h,c] = polarPcolor(R,theta,Z,'Nspokes',5) % [h,c] = polarPcolor(R,theta,Z,'Nspokes',5,'colBar',0) % [h,c] = polarPcolor(R,theta,Z,'Nspokes',5,'labelR','r (km)') % % INPUT % * R : % - type: float % - size: [1 x Nrr ] where Nrr = numel(R). % - dimension: radial distance. % * theta : % - type: float % - size: [1 x Ntheta ] where Ntheta = numel(theta). % - dimension: azimuth or elevation angle (deg). % - N.B.: The zero is defined with respect to the North. % * Z : % - type: float % - size: [Ntheta x Nrr] % - dimension: user's defined . % * varargin: % - Ncircles: number of circles for the grid definition. % - Nspokes: number of spokes for the grid definition. % - colBar: display the colorbar or not. % - labelR: legend for R. % % % OUTPUT % h: returns a handle to a SURFACE object. % c: returns a handle to a COLORBAR object. % %% Examples % R = linspace(3,10,100); % theta = linspace(0,180,360); % Z = linspace(0,10,360)'*linspace(0,10,100); % figure % polarPcolor(R,theta,Z,'Ncircles',3) % %% Author % Etienne Cheynet, University of Stavanger, Norway. 28/05/2016 % see also pcolor % %% InputParseer p = inputParser(); p.CaseSensitive = false; p.addOptional('Ncircles',5); p.addOptional('Nspokes',8); p.addOptional('labelR',''); p.addOptional('colBar',1); p.parse(varargin{:}); Ncircles = p.Results.Ncircles ; Nspokes = p.Results.Nspokes ; labelR = p.Results.labelR ; colBar = p.Results.colBar ; %% Preliminary checks % case where dimension is reversed Nrr = numel(R); Noo = numel(theta); if isequal(size(Z),[Noo,Nrr]), Z=Z'; end % case where dimension of Z is not compatible with theta and R if ~isequal(size(Z),[Nrr,Noo]) fprintf('\n') fprintf([ 'Size of Z is : [',num2str(size(Z)),'] \n']); fprintf([ 'Size of R is : [',num2str(size(R)),'] \n']); fprintf([ 'Size of theta is : [',num2str(size(theta)),'] \n\n']); error(' dimension of Z does not agree with dimension of R and Theta') end %% data plot rMin = min(R); rMax = max(R); thetaMin=min(theta); thetaMax =max(theta); % Definition of the mesh Rrange = rMax - rMin; % get the range for the radius rNorm = R/Rrange; %normalized radius [0,1] % get hold state cax = newplot; % transform data in polar coordinates to Cartesian coordinates. YY = (rNorm)'*cosd(theta); XX = (rNorm)'*sind(theta); % plot data on top of grid h = pcolor(XX,YY,Z,'parent',cax); shading flat set(cax,'dataaspectratio',[1 1 1]);axis off; if ~ishold(cax); % make a radial grid hold(cax,'on') % Draw circles and spokes createSpokes(thetaMin,thetaMax,Ncircles,Nspokes); createCircles(rMin,rMax,thetaMin,thetaMax,Ncircles,Nspokes) end %% PLot colorbar if specified if colBar==1, c =colorbar('location','WestOutside'); caxis([quantile(Z(:),0.01),quantile(Z(:),0.99)]) else c = []; end %% Outputs nargoutchk(0,2) if nargout==1, varargout{1}=h; elseif nargout==2, varargout{1}=h; varargout{2}=c; end %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% % Nested functions %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% function createSpokes(thetaMin,thetaMax,Ncircles,Nspokes) circleMesh = linspace(rMin,rMax,Ncircles); spokeMesh = linspace(thetaMin,thetaMax,Nspokes); contour = abs((circleMesh - circleMesh(1))/Rrange+R(1)/Rrange); cost = cosd(90-spokeMesh); % the zero angle is aligned with North sint = sind(90-spokeMesh); % the zero angle is aligned with North for kk = 1:Nspokes plot(cost(kk)*contour,sint(kk)*contour,'k:',... 'handlevisibility','off'); % plot graduations of angles % avoid superimposition of 0 and 360 if and(thetaMin==0,thetaMax == 360), if spokeMesh(kk)<360, text(1.05.*contour(end).*cost(kk),... 1.05.*contour(end).*sint(kk),... [num2str(spokeMesh(kk),3),char(176)],... 'horiz', 'center', 'vert', 'middle'); end else text(1.05.*contour(end).*cost(kk),... 1.05.*contour(end).*sint(kk),... [num2str(spokeMesh(kk),3),char(176)],... 'horiz', 'center', 'vert', 'middle'); end end end function createCircles(rMin,rMax,thetaMin,thetaMax,Ncircles,Nspokes) % define the grid in polar coordinates angleGrid = linspace(90-thetaMin,90-thetaMax,100); xGrid = cosd(angleGrid); yGrid = sind(angleGrid); circleMesh = linspace(rMin,rMax,Ncircles); spokeMesh = linspace(thetaMin,thetaMax,Nspokes); contour = abs((circleMesh - circleMesh(1))/Rrange+R(1)/Rrange); % plot circles for kk=1:length(contour) plot(xGrid*contour(kk), yGrid*contour(kk),'k:'); end % radius tick label for kk=1:Ncircles position = 0.51.*(spokeMesh(min(Nspokes,round(Ncircles/2)))+... spokeMesh(min(Nspokes,1+round(Ncircles/2)))); if abs(round(position)) ==90, % radial graduations text((contour(kk)).*cosd(90-position),... (0.1+contour(kk)).*sind(86-position),... num2str(circleMesh(kk),2),'verticalalignment','BaseLine',... 'horizontalAlignment', 'center',... 'handlevisibility','off','parent',cax); % annotate spokes text(contour(end).*0.6.*cosd(90-position),... 0.07+contour(end).*0.6.*sind(90-position),... [labelR],'verticalalignment','bottom',... 'horizontalAlignment', 'right',... 'handlevisibility','off','parent',cax); else % radial graduations text((contour(kk)).*cosd(90-position),... (contour(kk)).*sind(90-position),... num2str(circleMesh(kk),2),'verticalalignment','BaseLine',... 'horizontalAlignment', 'right',... 'handlevisibility','off','parent',cax); % annotate spokes text(contour(end).*0.6.*cosd(90-position),... contour(end).*0.6.*sind(90-position),... [labelR],'verticalalignment','bottom',... 'horizontalAlignment', 'right',... 'handlevisibility','off','parent',cax); end end end end
再贴一个示例代码:
%% Examples % The following examples illustrate the application of the function % polarPcolor clearvars;close all;clc; %% Minimalist example % Assuming that a remote sensor is measuring the wind field for a radial % distance ranging from 50 to 1000 m. The scanning azimuth is oriented from % North (0 deg) to North-North-East ( 80 deg): R = linspace(50,1000,100)./1000; % (distance in km) Az = linspace(0,80,100); % in degrees [~,~,windSpeed] = peaks(100); % radial wind speed figure(1) [h,c]=polarPcolor(R,Az,windSpeed); %% Example with options % We want to have 4 circles and 7 spokes, and to give a label to the % radial coordinate figure(2) [~,c]=polarPcolor(R,Az,windSpeed,'labelR','r (km)','Ncircles',7,'Nspokes',7); ylabel(c,' radial wind speed (m/s)'); set(gcf,'color','w') %% Dealing with outliers % We introduce outliers in the wind velocity data. These outliers % are represented as wind speed sample with a value of 100 m/s. These % corresponds to unrealistic data that need to be ignored. To avoid bad % scaling of the colorbar, the function polarPcolor uses the function caxis % combined to the function quantile to keep the colorbar properly scaled: % caxis([quantile(Z(:),0.01),quantile(Z(:),0.99)]) windSpeed(1:10:end,1:20:end)=100; figure(3) [~,c]=polarPcolor(R,Az,windSpeed); ylabel(c,' radial wind speed (m/s)'); set(gcf,'color','w') %% polarPcolor without colorbar % The colorbar is activated by default. It is possible to remove it by % using the option 'colBar'. When the colorbar is desactivated, the % outliers are not "removed" and bad scaling is clearly visible: figure(4) polarPcolor(R,Az,windSpeed,'colBar',0) ; %% Different geometry 1 N = 360; R = linspace(0,1000,N)./1000; % (distance in km) Az = linspace(0,360,N); % in degrees [~,~,windSpeed] = peaks(N); % radial wind speed figure(5) [~,c]= polarPcolor(R,Az,windSpeed); ylabel(c,' radial wind speed (m/s)'); set(gcf,'color','w') %% Different geometry 2 N = 360; R = linspace(500,1000,N)./1000; % (distance in km) Az = linspace(0,270,N); % in degrees [~,~,windSpeed] = peaks(N); % radial wind speed figure(6) [~,c]= polarPcolor(R,Az,windSpeed,'Ncircles',3); location = 'NorthOutside'; ylabel(c,' radial wind speed (m/s)'); set(c,'location',location); set(gcf,'color','w')