最终能达到的效果图
从图像可以看出来,这里的坐标参数并不是坐标轴上的x和y坐标,而是相对于整个figure对象的标准化坐标,取值范围[0,1]。 那么我们需要先找到x轴、y轴所对应的标准化坐标。
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(句柄,’属性名‘)就能得到想要的属性值
ans = 0.1300 0.1100 0.7750 0.8150
这里返回的结果分别是[与figure左边界距离,与figure低边界距离,坐标图宽度,坐标图高度],这个可以用set()测试一下。
所以现已知坐标图的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=xmax−xmin0−xmin×宽度+左边距
原 点 标 准 化 坐 标 y = 0 − y min y max − y min × 高 度 + 底 边 距 {原点标准化坐标}_{y}=\frac{0-{y}_{\min} }{{y}_{\max} -{y}_{\min} }\times高度 +底边距 原点标准化坐标y=ymax−ymin0−ymin×高度+底边距
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}}}$')