属实是写工具函数写上瘾了,又写了一个一行代码将坐标轴变为箭头坐标轴的函数,而且可以对其进行随意拖动和缩放(拖动需要先点击那个像手掌的符号):

功能函数的引用非常简单,就只是在最后面加上一行:

arrowAxes()

或者

arrowAxes(ax)

即可,以下给出几个例子:

demo1 基础使用

就像上面说的一样,编写好代码后在最后面引用一下工具函数即可:

% arrow axes demo1
% @author:slandarert=-pi:.2:2*pi;
stem(t,sin(t),'LineWidth',1.5);arrowAxes()

demo2 轴方向

可以调整坐标区域的XAxisLocation属性及YAxisLocation属性来调整坐标轴的方向和位置,总共有九种组合,篇幅问题这里不一一列举,想了解的可以去以下网址瞅瞅:

坐标区的外观和行为 - MATLAB - MathWorks 中国

这里只列举常用的四种:

% arrow axes demo2
% @author:slandarert=-pi:.2:2*pi;% 子图1
ax1=subplot(2,2,1);
plot(t,sin(t),'LineWidth',1.5);
arrowAxes(ax1)% 子图2
ax2=subplot(2,2,2);
plot(t,sin(t),'LineWidth',1.5);
ax2.XAxisLocation='top';
ax2.YAxisLocation='right';
arrowAxes(ax2)% 子图3
ax3=subplot(2,2,3);
plot(t,sin(t),'LineWidth',1.5);
ax3.XAxisLocation='origin';
arrowAxes(ax3)% 子图4
ax4=subplot(2,2,4);
plot(t,sin(t),'LineWidth',1.5);
ax4.XAxisLocation='origin';
ax4.YAxisLocation='origin';
arrowAxes(ax4)

demo3 轴的其他属性

在引用工具函数前调整坐标轴的粗细和颜色,引用工具函数时,工具函数会自动提取坐标轴的属性并赋予箭头坐标轴:

% arrow axes demo3
% @author:slandarert=-pi:.2:2*pi;
stem(t,sin(t),'LineWidth',1.5);% 修改坐标轴属性
ax=gca;
ax.XColor=[1,0,0];
ax.LineWidth=2;
ax.XAxisLocation='origin';arrowAxes(ax)

后言

不管画多少子图,怎样的轴方向和位置,每个子图都能像如下这样任意调整坐标范围和图像缩放。

工具函数完整代码

function arrowAxes(ax)
%
% @author: slandarer
% @公众号: slandarer随笔
% @知乎  : hikari
% @CSDN  : slandarer
%
% 期待您的关注!!!help arrowAxes % 若不希望输出[作者信息],请删除这行if nargin<1ax=gca;
endax.Box='off';
ax.UserData.arrow{1}=[];
ax.UserData.arrow{2}=[];
ax.UserData.arrow{3}=[];
ax.UserData.arrow{4}=[];pos=ax.Position;
xm=.02;
ym=.02;
% -------------------------------------------------------------------------
switch ax.XAxisLocationcase 'bottom'ax.UserData.arrow{2}=annotation('arrow');ax.UserData.arrow{2}.Color=ax.YColor;ax.UserData.arrow{2}.Position=[pos(1),pos(2),0,pos(4)+ym];case 'top'ax.UserData.arrow{4}=annotation('arrow');ax.UserData.arrow{4}.Color=ax.YColor;ax.UserData.arrow{4}.Position=[pos(1),pos(2)+pos(4),0,-pos(4)-ym];case 'origin'ax.UserData.arrow{2}=annotation('arrow');ax.UserData.arrow{2}.Color=ax.YColor;ax.UserData.arrow{2}.Position=[pos(1),pos(2),0,pos(4)+ym];ax.UserData.arrow{4}=annotation('arrow');ax.UserData.arrow{4}.Color=ax.YColor;ax.UserData.arrow{4}.Position=[pos(1),pos(2)+pos(4),0,-pos(4)-ym];
end
switch ax.YAxisLocationcase 'left'ax.UserData.arrow{1}=annotation('arrow');ax.UserData.arrow{1}.Color=ax.XColor;ax.UserData.arrow{1}.Position=[pos(1),pos(2),pos(3)+xm,0];case 'right'ax.UserData.arrow{3}=annotation('arrow');ax.UserData.arrow{3}.Color=ax.XColor;ax.UserData.arrow{3}.Position=[pos(1)+pos(3),pos(2),-pos(3)-xm,0];case 'origin'ax.UserData.arrow{1}=annotation('arrow');ax.UserData.arrow{1}.Color=ax.XColor;ax.UserData.arrow{1}.Position=[pos(1),pos(2),pos(3)+xm,0];ax.UserData.arrow{3}=annotation('arrow');ax.UserData.arrow{3}.Color=ax.XColor;ax.UserData.arrow{3}.Position=[pos(1)+pos(3),pos(2),-pos(3)-xm,0];
endif strcmp(ax.XAxisLocation,'top')if ~isempty(ax.UserData.arrow{1}),ax.UserData.arrow{1}.Position=[pos(1),pos(2)+pos(4),pos(3)+xm,0];endif ~isempty(ax.UserData.arrow{3}),ax.UserData.arrow{3}.Position=[pos(1)+pos(3),pos(2)+pos(4),-pos(3)-xm,0];end
end
if strcmp(ax.YAxisLocation,'right')if ~isempty(ax.UserData.arrow{2}),ax.UserData.arrow{2}.Position=[pos(1)+pos(3),pos(2),0,pos(4)+ym];endif ~isempty(ax.UserData.arrow{4}),ax.UserData.arrow{4}.Position=[pos(1)+pos(3),pos(2)+pos(4),0,-pos(4)-ym];end
end
for i=1:4if ~isempty(ax.UserData.arrow{i}),ax.UserData.arrow{i}.LineWidth=ax.LineWidth;end
endreArrow()
% -------------------------------------------------------------------------
function reArrow(~,~)
if strcmp(ax.XAxisLocation,'origin')pos=ax.Position;ylim=ax.YLim;sepy=(0-ylim(1))./(ylim(2)-ylim(1)).*pos(4);switch truecase ylim(2)<=0if ~isempty(ax.UserData.arrow{1}),ax.UserData.arrow{1}.Position=[pos(1),pos(2)+pos(4),pos(3)+xm,0];endif ~isempty(ax.UserData.arrow{3}),ax.UserData.arrow{3}.Position=[pos(1)+pos(3),pos(2)+pos(4),-pos(3)-xm,0];endcase ylim(1)>=0if ~isempty(ax.UserData.arrow{1}),ax.UserData.arrow{1}.Position=[pos(1),pos(2),pos(3)+xm,0];endif ~isempty(ax.UserData.arrow{3}),ax.UserData.arrow{3}.Position=[pos(1)+pos(3),pos(2),-pos(3)-xm,0];endcase ylim(2)>0&ylim(1)<0if ~isempty(ax.UserData.arrow{1}),ax.UserData.arrow{1}.Position=[pos(1),pos(2)+sepy,pos(3)+xm,0];endif ~isempty(ax.UserData.arrow{3}),ax.UserData.arrow{3}.Position=[pos(1)+pos(3),pos(2)+sepy,-pos(3)-xm,0];endend
end
if strcmp(ax.YAxisLocation,'origin')pos=ax.Position;xlim=ax.XLim;sepx=(0-xlim(1))./(xlim(2)-xlim(1)).*pos(3);switch truecase xlim(2)<=0if ~isempty(ax.UserData.arrow{2}),ax.UserData.arrow{2}.Position=[pos(1)+pos(3),pos(2),0,pos(4)+ym];endif ~isempty(ax.UserData.arrow{4}),ax.UserData.arrow{4}.Position=[pos(1)+pos(3),pos(2)+pos(4),0,-pos(4)-ym];endcase xlim(1)>=0if ~isempty(ax.UserData.arrow{2}),ax.UserData.arrow{2}.Position=[pos(1),pos(2),0,pos(4)+ym];endif ~isempty(ax.UserData.arrow{4}),ax.UserData.arrow{4}.Position=[pos(1),pos(2)+pos(4),0,-pos(4)-ym];endcase xlim(2)>0&xlim(1)<0if ~isempty(ax.UserData.arrow{2}),ax.UserData.arrow{2}.Position=[pos(1)+sepx,pos(2),0,pos(4)+ym];endif ~isempty(ax.UserData.arrow{4}),ax.UserData.arrow{4}.Position=[pos(1)+sepx,pos(2)+pos(4),0,-pos(4)-ym];endend
end
end
set(ax.Parent,'WindowButtonMotionFcn',@reArrow);  % 设置鼠标按下回调
end

MATLAB | 一行代码生成箭头坐标轴,为坐标轴增添箭头相关推荐

  1. Matlab之一行代码生成服从三角分布随机数

    Matlab之一行代码生成服从三角分布随机数 0 先上干货 代码长这样: x1 = random(makedist('Triangular','a',3,'b',4,'c',5),1,10000) % ...

  2. Cesium 自定义箭头坐标轴 圆坐标轴(一)

    Cesium 自定义箭头坐标轴 圆坐标轴(一) 箭头坐标轴和圆坐标轴 实现思路 绘制箭头坐标 绘制圆坐标 总结 箭头坐标轴和圆坐标轴 为了实现Cesium 对模型的拖拽平移和旋转,需要以模型为中心建立 ...

  3. 绘画带箭头的xy坐标轴

    项目场景: 需要用python绘画带箭头的xy坐标轴,代码如下: ax = axisartist.Subplot(fig, 212) fig.add_axes(ax) ax.axis["bo ...

  4. pandas_profiling :教你一行代码生成数据分析报告

    分析报告全貌 ‍ 什么是探索性数据分析 熟悉pandas的童鞋估计都知道pandas的describe()和info()函数,用来查看数据的整体情况,比如平均值.标准差之类,就是所谓的探索性数据分析- ...

  5. python数据分析并生成报告_pandas_profiling :教你一行代码生成数据分析报告

    分析报告全貌 什么是探索性数据分析 熟悉pandas的童鞋估计都知道pandas的describe()和info()函数,用来查看数据的整体情况,比如平均值.标准差之类,就是所谓的探索性数据分析-ED ...

  6. 一行代码生成数据分析报告—Pandas-profiling

    分析一个问题,从对样本进行探索开始.Python中有很多常用的数据分析函数,可以帮助我们对样本有一个初步的认识,比如describe()函数,可以很方便地生成每个变量的最大值.最小值.分位数等.    ...

  7. Java实现一行代码生成二维码,可传输到前端展示,可自定义二维码样式,可设置图片格式,可对二维码添加图片,可对二维码添加文字,可以设置二维码大小、字体大小、字体颜色、边框颜色、边框大小等等

    Java实现一行代码生成二维码,可传输到前端展示,可自定义二维码样式,可设置图片格式,可对二维码添加图片,可对二维码添加文字,可以设置二维码大小.字体大小.字体颜色.边框颜色.边框大小等等. 0.准备 ...

  8. jmu-python-随机生成密码(一行代码生成题目要求的字符列表)

    jmu-python-随机生成密码 题目 答案 初始版 优化版(一行代码生成题目要求的字符列表) 总结 题目 答案 初始版 import randomx = eval(input()) n = eva ...

  9. js map 箭头_JS异常函数之箭头函数

    来源:logrocket作者:Maciej Cieślar 译者:前端小智 为了保证的可读性,本文采用意译而非直译. 在JS中,箭头函数可以像普通函数一样以多种方式使用.但是,它们一般用于需要匿名函数 ...

最新文章

  1. LVS DR模型配置示例
  2. 【python进阶】_多线程多进程
  3. 普211标准三维EE零基础转CS申
  4. 使用swiper_关于使用swiper制作web轮播图
  5. Oracle 从入门到精通视频教程(11G版本)
  6. tpc-c值大于46万_超过46万人参加了2018年慕尼黑啤酒节
  7. [转]形态学操作:膨胀与腐蚀
  8. .Net中俩种使用不定参数的方法
  9. Linux安装Axis C构建WebService服务
  10. 在自动驾驶技术上,一向自信满满的马斯克也承认了特斯拉的不足
  11. div+css强制(不)换行 .
  12. 语音芯片,语音合成芯片,嵌入式语音合成软件的区别
  13. png在线转换透明ICO
  14. 制造业执行系统MES 在汽车零配件行业展露锋芒
  15. NOD32升级ID,免费ID升级网址
  16. 【蓝桥杯选拔赛真题43】Scratch航天飞行 少儿编程scratch蓝桥杯选拔赛真题讲解
  17. Godaddy绑定手机遗失,成功申诉取消手机两步验证全过程
  18. Windows2000、2003浏览器无法上网、无法联网
  19. android安装小组件,万能小组件安卓下载-万能小组件下载-万能小组件app下载官方...
  20. 淘淘商城第78讲——查询商品详情添加缓存的分析

热门文章

  1. 最简单的python爬虫实战——爬取王者荣耀皮肤及头像
  2. 经认定的金山区示范单位可获得5万元资金经理
  3. Idea 配置git
  4. iOS 证书权限分配
  5. 《凑硬币》 动态规划算法入门
  6. Ajax的beforeSend用处
  7. 常见芯片算力对比(一)
  8. 2022年软考考试时间安排
  9. 小程序跳转到H5再跳转回小程序
  10. 时序预测 | MATLAB实现基于Adam算法优化LSTM长短期记忆神经网络时间序列预测