MATLAB 颜色图函数(imagesc/scatter/polarPcolor/pcolor)

  • 2020 年 3 月 31 日
  • 笔记

2维的热度图 imagesc

imagesc(x, y, z),x和y分别是横纵坐标,z为值,表示颜色

1 imagesc(theta,phi,slc); colorbar  2 xlabel('theta(°)','fontname','Times New Roman','FontSize',14);  3 ylabel('phi(°)','fontname','Times New Roman','FontSize',14);  4 sta = '3 objects at (θ,φ,r) : (-30,30,1) (0,0,2) (60,-60,0.5)';  5 str=sprintf(strcat('3D Imaging Slice at :', num2str(d_max*D/N), '(m)', 'n',sta));  6 title(str, 'fontname','Times New Roman','Color','k','FontSize',13);  7 grid on

 

 

其中,colorbar的坐标值调整:caxis([0 1]);

 colormap的色系调整:colormap hot

 

3维散点图 scatter

1 scatter3(x,y,z,24,c,'filled');  2 % axis([-(R+2) (R+2) -(R+2) (R+2) 0 (h+2)]);  3 colorbar

 

 

2维 极坐标热度图 polarPcolor

polarPcolor(R_axis, theta, value),前两个为半径方向坐标轴和圆心角坐标轴,value为值,用颜色表示

1 [fig, clr] = polarPcolor(R_axis, theta, x_d_th, 'labelR','range (m)','Ncircles', 5,'Nspokes',7);  2 colormap hot  3 % caxis([0 1]);

 

 

其中polarPcolor代码如下:

  1 function [varargout] = polarPcolor(R,theta,Z,varargin)    2 % [h,c] = polarPcolor1(R,theta,Z,varargin) is a pseudocolor plot of matrix    3 % Z for a vector radius R and a vector angle theta.    4 % The elements of Z specify the color in each cell of the    5 % plot. The goal is to apply pcolor function with a polar grid, which    6 % provides a better visualization than a cartesian grid.    7 %    8 %% Syntax    9 %   10 % [h,c] = polarPcolor(R,theta,Z)   11 % [h,c] = polarPcolor(R,theta,Z,'Ncircles',10)   12 % [h,c] = polarPcolor(R,theta,Z,'Nspokes',5)   13 % [h,c] = polarPcolor(R,theta,Z,'Nspokes',5,'colBar',0)   14 % [h,c] = polarPcolor(R,theta,Z,'Nspokes',5,'labelR','r (km)')   15 %   16 % INPUT   17 %    * R :   18 %        - type: float   19 %        - size: [1 x Nrr ] where Nrr = numel(R).   20 %        - dimension: radial distance.   21 %    * theta :   22 %        - type: float   23 %        - size: [1 x Ntheta ] where Ntheta = numel(theta).   24 %        - dimension: azimuth or elevation angle (deg).   25 %        - N.B.: The zero is defined with respect to the North.   26 %    * Z :   27 %        - type: float   28 %        - size: [Ntheta x Nrr]   29 %        - dimension: user's defined .   30 %    * varargin:   31 %        - Ncircles: number  of circles for the grid definition.   32 %        - Nspokes: number of spokes for the grid definition.   33 %        - colBar: display the colorbar or not.   34 %        - labelR: legend for R.   35 %   36 %   37 % OUTPUT   38 % h: returns a handle to a SURFACE object.   39 % c: returns a handle to a COLORBAR object.   40 %   41 %% Examples   42 % R = linspace(3,10,100);   43 % theta = linspace(0,180,360);   44 % Z = linspace(0,10,360)'*linspace(0,10,100);   45 % figure   46 % polarPcolor(R,theta,Z,'Ncircles',3)   47 %   48 %% Author   49 % Etienne Cheynet, University of Stavanger, Norway. 28/05/2016   50 % see also pcolor   51 %   52   53 %%  InputParseer   54 p = inputParser();   55 p.CaseSensitive = false;   56 p.addOptional('Ncircles',5);   57 p.addOptional('Nspokes',8);   58 p.addOptional('labelR','');   59 p.addOptional('colBar',1);   60 p.parse(varargin{:});   61   62 Ncircles = p.Results.Ncircles ;   63 Nspokes = p.Results.Nspokes ;   64 labelR = p.Results.labelR ;   65 colBar = p.Results.colBar ;   66 %% Preliminary checks   67 % case where dimension is reversed   68 Nrr = numel(R);   69 Noo = numel(theta);   70 if isequal(size(Z),[Noo,Nrr]),   71     Z=Z';   72 end   73   74 % case where dimension of Z is not compatible with theta and R   75 if ~isequal(size(Z),[Nrr,Noo])   76     fprintf('n')   77     fprintf([ 'Size of Z is : [',num2str(size(Z)),'] n']);   78     fprintf([ 'Size of R is : [',num2str(size(R)),'] n']);   79     fprintf([ 'Size of theta is : [',num2str(size(theta)),'] nn']);   80     error(' dimension of Z does not agree with dimension of R and Theta')   81 end   82 %% data plot   83 rMin = min(R);   84 rMax = max(R);   85 thetaMin=min(theta);   86 thetaMax =max(theta);   87 % Definition of the mesh   88 Rrange = rMax - rMin; % get the range for the radius   89 rNorm = R/Rrange; %normalized radius [0,1]   90 % get hold state   91 cax = newplot;   92 % transform data in polar coordinates to Cartesian coordinates.   93 YY = (rNorm)'*cosd(theta);   94 XX = (rNorm)'*sind(theta);   95 % plot data on top of grid   96 h = pcolor(XX,YY,Z,'parent',cax);   97 shading flat   98 set(cax,'dataaspectratio',[1 1 1]);axis off;   99 if ~ishold(cax);  100     % make a radial grid  101     hold(cax,'on')  102     % Draw circles and spokes  103     createSpokes(thetaMin,thetaMax,Ncircles,Nspokes);  104     createCircles(rMin,rMax,thetaMin,thetaMax,Ncircles,Nspokes)  105 end  106  107 %% PLot colorbar if specified  108 if colBar==1,  109     c =colorbar('location','WestOutside');  110     caxis([quantile(Z(:),0.01),quantile(Z(:),0.99)])  111 else  112     c = [];  113 end  114  115 %% Outputs  116 nargoutchk(0,2)  117 if nargout==1,  118     varargout{1}=h;  119 elseif nargout==2,  120     varargout{1}=h;  121     varargout{2}=c;  122 end  123  124 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%  125 % Nested functions  126 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%  127     function createSpokes(thetaMin,thetaMax,Ncircles,Nspokes)  128  129         circleMesh = linspace(rMin,rMax,Ncircles);  130         spokeMesh = linspace(thetaMin,thetaMax,Nspokes);  131         contour = abs((circleMesh - circleMesh(1))/Rrange+R(1)/Rrange);  132         cost = cosd(90-spokeMesh); % the zero angle is aligned with North  133         sint = sind(90-spokeMesh); % the zero angle is aligned with North  134         for kk = 1:Nspokes  135             plot(cost(kk)*contour,sint(kk)*contour,'k:',...  136                 'handlevisibility','off');  137             % plot graduations of angles  138             % avoid superimposition of 0 and 360  139             if and(thetaMin==0,thetaMax == 360),  140                 if spokeMesh(kk)<360,  141  142                     text(1.05.*contour(end).*cost(kk),...  143                         1.05.*contour(end).*sint(kk),...  144                         [num2str(spokeMesh(kk),3),char(176)],...  145                         'horiz', 'center', 'vert', 'middle');  146                 end  147             else  148                 text(1.05.*contour(end).*cost(kk),...  149                     1.05.*contour(end).*sint(kk),...  150                     [num2str(spokeMesh(kk),3),char(176)],...  151                     'horiz', 'center', 'vert', 'middle');  152             end  153  154         end  155     end  156     function createCircles(rMin,rMax,thetaMin,thetaMax,Ncircles,Nspokes)  157  158         % define the grid in polar coordinates  159         angleGrid = linspace(90-thetaMin,90-thetaMax,100);  160         xGrid = cosd(angleGrid);  161         yGrid = sind(angleGrid);  162         circleMesh = linspace(rMin,rMax,Ncircles);  163         spokeMesh = linspace(thetaMin,thetaMax,Nspokes);  164         contour = abs((circleMesh - circleMesh(1))/Rrange+R(1)/Rrange);  165         % plot circles  166         for kk=1:length(contour)  167             plot(xGrid*contour(kk), yGrid*contour(kk),'k:');  168         end  169         % radius tick label  170         for kk=1:Ncircles  171  172             position = 0.51.*(spokeMesh(min(Nspokes,round(Ncircles/2)))+...  173                 spokeMesh(min(Nspokes,1+round(Ncircles/2))));  174  175             if abs(round(position)) ==90,  176                 % radial graduations  177                 text((contour(kk)).*cosd(90-position),...  178                     (0.1+contour(kk)).*sind(86-position),...  179                     num2str(circleMesh(kk),2),'verticalalignment','BaseLine',...  180                     'horizontalAlignment', 'center',...  181                     'handlevisibility','off','parent',cax);  182  183                 % annotate spokes  184                 text(contour(end).*0.6.*cosd(90-position),...  185                     0.07+contour(end).*0.6.*sind(90-position),...  186                     [labelR],'verticalalignment','bottom',...  187                     'horizontalAlignment', 'right',...  188                     'handlevisibility','off','parent',cax);  189             else  190                 % radial graduations  191                 text((contour(kk)).*cosd(90-position),...  192                     (contour(kk)).*sind(90-position),...  193                     num2str(circleMesh(kk),2),'verticalalignment','BaseLine',...  194                     'horizontalAlignment', 'right',...  195                     'handlevisibility','off','parent',cax);  196  197                 % annotate spokes  198                 text(contour(end).*0.6.*cosd(90-position),...  199                     contour(end).*0.6.*sind(90-position),...  200                     [labelR],'verticalalignment','bottom',...  201                     'horizontalAlignment', 'right',...  202                     'handlevisibility','off','parent',cax);  203             end  204         end  205  206     end  207 end

View Code

再贴一个示例代码:

 1 %% Examples   2 % The following examples illustrate the application of the function   3 % polarPcolor   4 clearvars;close all;clc;   5   6 %% Minimalist example   7 % Assuming that a remote sensor is measuring the wind field for a radial   8 % distance ranging from 50 to 1000 m. The scanning azimuth is oriented from   9 % North (0 deg) to North-North-East ( 80 deg):  10 R = linspace(50,1000,100)./1000; % (distance in km)  11 Az = linspace(0,80,100); % in degrees  12 [~,~,windSpeed] = peaks(100); % radial wind speed  13 figure(1)  14 [h,c]=polarPcolor(R,Az,windSpeed);  15  16 %% Example with options  17 %  We want to have 4 circles and 7 spokes, and to give a label to the  18 %  radial coordinate  19  20 figure(2)  21 [~,c]=polarPcolor(R,Az,windSpeed,'labelR','r (km)','Ncircles',7,'Nspokes',7);  22 ylabel(c,' radial wind speed (m/s)');  23 set(gcf,'color','w')  24 %% Dealing with outliers  25 % We introduce outliers in the wind velocity data. These outliers  26 % are represented as wind speed sample with a value of 100 m/s. These  27 % corresponds to unrealistic data that need to be ignored. To avoid bad  28 % scaling of the colorbar, the function polarPcolor uses the function caxis  29 % combined to the function quantile to keep the colorbar properly scaled:  30 % caxis([quantile(Z(:),0.01),quantile(Z(:),0.99)])  31  32 windSpeed(1:10:end,1:20:end)=100;  33  34 figure(3)  35 [~,c]=polarPcolor(R,Az,windSpeed);  36 ylabel(c,' radial wind speed (m/s)');  37 set(gcf,'color','w')  38  39 %% polarPcolor without colorbar  40 % The colorbar is activated by default. It is possible to remove it by  41 % using the option 'colBar'. When the colorbar is desactivated, the  42 % outliers are not "removed" and bad scaling is clearly visible:  43  44 figure(4)  45 polarPcolor(R,Az,windSpeed,'colBar',0) ;  46  47  48 %% Different geometry 1  49 N = 360;  50 R = linspace(0,1000,N)./1000; % (distance in km)  51 Az = linspace(0,360,N); % in degrees  52 [~,~,windSpeed] = peaks(N); % radial wind speed  53 figure(5)  54 [~,c]= polarPcolor(R,Az,windSpeed);  55 ylabel(c,' radial wind speed (m/s)');  56 set(gcf,'color','w')  57 %% Different geometry 2  58 N = 360;  59 R = linspace(500,1000,N)./1000; % (distance in km)  60 Az = linspace(0,270,N); % in degrees  61 [~,~,windSpeed] = peaks(N); % radial wind speed  62 figure(6)  63 [~,c]= polarPcolor(R,Az,windSpeed,'Ncircles',3);  64 location = 'NorthOutside';  65 ylabel(c,' radial wind speed (m/s)');  66 set(c,'location',location);  67 set(gcf,'color','w')

View Code