zoukankan      html  css  js  c++  java
  • 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);

  • 相关阅读:
    Java 执行
    Java 反射
    Mysql 日常
    Java 引用
    Mysql insert on update
    Java Mail 异常
    HDU_5456_数位dp
    HDU_4734_数位dp
    POJ_1221_DP
    POJ_1050_最大子矩阵
  • 原文地址:https://www.cnblogs.com/stxs/p/8721348.html
Copyright © 2011-2022 走看看