matlab y轴设中间 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 = gca
get()查询图形对象属性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 off%隐藏坐标系axis on
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}}}$')
  • 1
    点赞
  • 14
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值