Matlab繪圖基礎——利用axes(坐標系圖形對象)繪制重疊圖像 及 一圖多軸(一幅圖繪制多個坐標軸)


描述

axes在當前窗口中創建一個包含默認屬性坐標系

axes('PropertyName',propertyvalue,...)創建坐標系時,同時指定它的一些屬性,沒有指定的使用DefaultAxes**,當然可以在以后使用set/get函數進行設置/讀取,坐標系axes所有屬性參見附錄

axes(h)將坐標系h置為當前坐標系,同時將figure中的CurrentAxes屬性設置為h,並且將h排列到children屬性中第一個axes位置。默認情況,所有圖形函數都是在當前坐標系上繪圖

h = axes(...)創建坐標系時返回它的句柄,方便以后操作

注意:創建時有三種方式直接指定屬性,無先后順序,不區分大小寫,效果一致

(1)Name/Value配對形式

axes('Position',[0.2 0.2 0.6 0.6],'XGrid','on','XTickLabel',[])

(2)結構體形式

pp.Position=[0.2 0.2 0.6 0.6];

pp.XGrid='on';

pp.XTickLabel=[];

axes(pp)

(3)細胞元組形式

Name={'Position','XGrid','XTickLabel'};

Value={[0.2 0.2 0.6 0.6],'on',[]};

axes(Name,Value)

 

應用實例1:繪制重疊圖像

clear;close;
%% 先畫第一個大圖像
set(groot,'defaultAxesColorOrder',[0 0 0;1 0 0],...
      'defaultAxesLineStyleOrder','--|-|:|-.');
    % groot refers to the graphics root object——help
    % 這里的設置對象(groot)不能是h1或h2,否則不起作用
    % 設置繪制點線的樣式和他們的順序,這里設置的順序依次為:
        % 黑色虛線、紅色虛線;黑色實線、紅色實線;黑色點點、紅色點點;黑色點線、紅色點線
h1=axes('position',[0.08 0.1 0.85 0.85]); % 創建一個坐標系
    %讓 坐標軸的左下角 與 窗口左側 的距離時窗口寬度的8%,距離下側10%
    %整個坐標軸的寬占85%,高占85%。一個小框就出來了
axes(h1);     %將h1設置為當前坐標系,為繪圖准備
Z = peaks; x = 1:length(Z);y = Z(3:10,:);
plot(x,y);   axis(h1,[0,49,-6,0.5]);  %坐標軸句柄h1不能少!
    %畫圖     %x的坐標范圍是0到2π,y的范圍是-0.5到0.5
legend('黑色虛線','紅色虛線','黑色實線','紅色實線','黑色點點','紅色點點','黑色點線','紅色點線')
 
%% 在原圖上插入一個新的小圖像
set(groot,'defaultAxesLineStyleOrder','remove','defaultAxesColorOrder','remove');
    %每次使用記得清除上次設置的參數,否則設置的參數會被保留下來
h2=axes('Position',[0.1 0.12 0.3 0.3]); 
   % 建立的坐標軸把原來的覆蓋了是吧?這說明建立坐標軸是在繪圖(點、線)之前
axes(h2);                  % 將h2設置為當前坐標系
plot(rand(10,3));
set(h2,'xticklabel','','yticklabel','')  %設置x軸和y軸的標注不顯示
axis tight; colorbar;                    %可以發現這里的axis和colorbar只對h2起作用

應用實例2:一幅圖繪制多個坐標軸

% 數據准備
x1=0:0.01:10;y1=sin(x1);
x2=0:0.01:10;y2=cos(x2);
% 設置坐標系
ax1=gca;set(ax1,'XColor','r','YColor','r');
ax2=axes('Position',get(ax1,'Position'),...
    'XAxisLocation','top','YAxisLocation','right',...
    'Color','none','XColor','k','YColor','k');
    % XAxisLocation和YAxisLocation屬性指定在圖形的哪一側放置x軸和y軸
    % Color屬性將ax2設置為透明,若沒有則ax1繪制的圖像會被覆蓋
% 展繪數據
h1=line(x1,y1,'Color','r','Parent',ax1);
h2=line(x2,y2,'Color','k','Parent',ax2);

應用實例3:結合axis,axes,colorbar等工具,制作一個數字圖像灰度統計圖

注:axis設置坐標軸取值范圍可以參考這里:https://www.cnblogs.com/stxs/p/8617140.html 

% 數據生成及展示(真實情況可以用數字圖像代替)

set(groot,'defaultAxesLineStyleOrder','remove','defaultAxesColorOrder','remove');

%每次使用記得清除上次設置的參數,否則設置的參數會被保留下來

x=1:255;y=rand(1,255);y=y';%y是行向量還是列向量都無所謂

n=length(x);

stem(x,y, 'Marker', 'none');

title('未設置坐標軸的區間','fontsize',14);

% 坐標軸區間的自動設置(適用於直方圖的顯示)

% Get x/y limits of axes using axis

hist_axes = gca;

limits = axis(hist_axes);

if n ~= 1 %當只有一個值時設置x坐標軸

limits(1) = min(x);

else

limits(1) = 0;

end

limits(2) = max(x);

var = sqrt(y'*y/length(y));

limits(4) = 2*var; % 只改變了y軸顯示的高度

axis(hist_axes,limits);

title('設置了的坐標軸區間','fontsize',14);

% 改變圖像的位置,寬和高,隱藏X軸的標注

% In GUIDE, default axes units are characters. In order for axes repositiong

% to behave properly, units need to be normalized.

hist_axes_units_old = get(hist_axes,'units');

set(hist_axes,'Units','Normalized');

 

% 隱藏X軸的標注

% hist_axes.XAxis.Visible = 'off';

% 上面一句也可以隱藏Ticks,同時Box的上端也隱藏了,這就使得圖像看上去不太好看

% 下面這一句可以只隱藏Ticks;

hist_axes.XTick= [];

 

% Get axis position and make room for others.

pos = get(hist_axes,'pos');

set(hist_axes,'pos',[pos(1) 0.15 pos(3) 0.75])

set(hist_axes,'Units',hist_axes_units_old); % 坐標向上移動了,相應也調整了整個圖眾向比例

title('移動了的坐標原點','fontsize',14);

% 設置ColorBar

c = colorbar('position',[pos(1) 0.1 pos(3) 0.05], 'location','southoutside');

c.Ticks= 0:0.125:1;

c.TickLabels = ceil((0:0.125:1)*255); % 使用floor函數,Ticks與真實值似乎有偏差

c.Box = 'off'; % 取消顯示ColorBar的框框,這樣使ColorBar的上框線看起來不粗

c.TickDirection = 'both';

colormap gray;

% colorbar最左下角點的橫坐標、縱坐標、寬度、高度

title('一個灰度統計圖的繪制就完成了','fontsize',14);


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM