matlab y轴设中间 x轴 y轴 设箭头 输出图像大小 图形对象 句柄 属性操作

    科技2022-07-10  129

    目录

    前言1.绘制带箭头的对象核心函数:annotation例:建立从(0,0)到(1,1)的箭头注释对象 2.找到x轴、y轴所对应的标准化坐标核心函数:gca、get、set例:输出当前坐标区对象的所有属性例:取坐标图的标准化坐标例:设坐标图左边距为0.1,底边距为0.1,宽度为0.5,高度为0.5 3.绘制带箭头的x轴和y轴 结语

    前言

    最终能达到的效果图

    1.绘制带箭头的对象

    核心函数:annotation

    annotation('arrow',x,y)%建立从(x(1), y(1))到(x(2), y(2))的箭头注释对象

    例:建立从(0,0)到(1,1)的箭头注释对象

    figure() annotation('arrow',[0 1],[0 1]);

    从图像可以看出来,这里的坐标参数并不是坐标轴上的x和y坐标,而是相对于整个figure对象的标准化坐标,取值范围[0,1]。 那么我们需要先找到x轴、y轴所对应的标准化坐标。

    2.找到x轴、y轴所对应的标准化坐标

    核心函数:gca、get、set

    函数名说明语法gca()当前坐标区或图ax = gcaget()查询图形对象属性v = get(h,propertyName)set()设置图形对象属性set(H,Name,Value)

    例:输出当前坐标区对象的所有属性

    gca

    ans = Axes - 属性: XLim: [0 1] YLim: [0 1] XScale: ‘linear’ YScale: ‘linear’ GridLineStyle: ‘-’ Position: [0.1000 0.1000 0.5000 0.5000] Units: ‘normalized’ 显示 所有属性

    用get(句柄,’属性名‘)就能得到想要的属性值

    例:取坐标图的标准化坐标

    get(gca,'Position')

    ans = 0.1300 0.1100 0.7750 0.8150

    这里返回的结果分别是[与figure左边界距离,与figure低边界距离,坐标图宽度,坐标图高度],这个可以用set()测试一下。

    例:设坐标图左边距为0.1,底边距为0.1,宽度为0.5,高度为0.5

    set(gca,'Position',[0.1,0.1,0.5,0.5])

    所以现已知坐标图的Position属性,即[左边距,底边距,宽度,高度],以及坐标图的XLim、YLim属性,即[xmin,xmax]、[ymin,ymax] 假设坐标轴原点在内部,则

    原 点 标 准 化 坐 标 x = 0 − x min ⁡ x max ⁡ − x min ⁡ × 宽 度 + 左 边 距 {原点标准化坐标}_{x}=\frac{0-{x}_{\min} }{{x}_{\max} -{x}_{\min} }\times宽度 +左边距 x=xmaxxmin0xmin×+

    原 点 标 准 化 坐 标 y = 0 − y min ⁡ y max ⁡ − y min ⁡ × 高 度 + 底 边 距 {原点标准化坐标}_{y}=\frac{0-{y}_{\min} }{{y}_{\max} -{y}_{\min} }\times高度 +底边距 y=ymaxymin0ymin×+

    3.绘制带箭头的x轴和y轴

    Position=get(gca,'Position') XLim=get(gca,'XLim'); YLim=get(gca,'YLim'); dy=(0-YLim(1))/(YLim(2)-YLim(1)); annotation('Arrow',[Position(1) Position(1)+Position(3)],[Position(2)+dy*Position(4) Position(2)+dy*Position(4)]) dx=(0-XLim(1))/(XLim(2)-XLim(1)); annotation('Arrow',[Position(1)+dx*Position(3) Position(1)+dx*Position(3)],[Position(2) Position(2)+Position(4)]) axis off

    axis off%隐藏坐标系 axis on%显示坐标系

    结语

    最后再贴上效果图代码,我是用function实现的。

    function myplot(Axis,fun,latex_x,latex_y,latex_fun) %Axis=[-5,5,-1,5]%[xmin,xmax,ymin,ymax] figure() Position=[0.1,0.05,0.8,0.82];%[距figure左,距figure底,宽度,高度] set(gca,'Position',Position) a=get(gcf,'Position'); set(gcf,'Position',[a(1)+a(3)-800,a(2)+a(4)-600,800,600]) fun_l=ezplot(fun);%fun='1+x^2' set(fun_l,'LineWidth',3) axis(Axis) dy=(0-Axis(3))/(Axis(4)-Axis(3));%(0-min(y))/(max(y)-min(y)) annotation('Arrow',[Position(1) Position(1)+Position(3)],[Position(2)+dy*Position(4) Position(2)+dy*Position(4)]) xlabel0=annotation('TextBox',[Position(1)+Position(3),Position(2)+dy*Position(4),0.03,0.03]); set(xlabel0,'String',latex_x,'Interpreter','latex','FontName','Times New Roman','FontSize',16,'EdgeColor','none') dx=(0-Axis(1))/(Axis(2)-Axis(1));%(0-min(x))/(max(x)-min(x)) annotation('Arrow',[Position(1)+dx*Position(3) Position(1)+dx*Position(3)],[Position(2) Position(2)+Position(4)]) ylabel0=annotation('TextBox',[Position(1)+dx*Position(3),Position(2)+Position(4),0.03,0.03]); set(ylabel0,'String',latex_y,'Interpreter','latex','FontName','Times New Roman','FontSize',16,'EdgeColor','none') t=title(latex_fun,'Interpreter','latex','Position',[0,Axis(4)+(Axis(4)-Axis(3))*0.0396,0]);%title的父对象为坐标 set(t,'FontName','Times New Roman','FontSize',16) axis off; end myplot([-5,5,-1,5],'1+x^2','${k}_{x}$','$E$','$E(k)={{C}_{x}}+\frac{{{\hbar }^{2}}{{k}_{x}}^{2}}{2{{m}_{1}}}$')
    Processed: 0.099, SQL: 8