找回密码
 注册
Simdroid-非首页
查看: 129|回复: 8

不同子图间的连线怎样用命令流实现

[复制链接]
发表于 2011-9-20 13:45:00 | 显示全部楼层 |阅读模式 来自 黑龙江哈尔滨
本帖最后由 loveblue 于 2011-9-20 14:09 编辑

请教如图中,两个子图间连线(图中后画的红线)用命令流怎么能实现?

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?注册

×
发表于 2011-9-20 14:33:58 | 显示全部楼层 来自 河北廊坊
Simdroid开发平台
本帖最后由 qibbxxt 于 2011-9-20 14:52 编辑

你给的图形上面不是已经实现了这个功能吗?
我的想法是可以在建立一个axes,让其隐藏
或者可以用
  1. annotation(figure1,'line',[x1,x2],...
  2.     [y1,y2]);
复制代码
这样的方式实现,这里的坐标是针对figure1的
回复 不支持

使用道具 举报

 楼主| 发表于 2011-9-20 14:40:01 | 显示全部楼层 来自 黑龙江哈尔滨
能具体说明怎么实现吗,上面的是从别的地方粘过来的图,没有命令流,
回复 不支持

使用道具 举报

发表于 2011-9-20 17:08:01 | 显示全部楼层 来自 河北廊坊
本帖最后由 qibbxxt 于 2011-9-20 17:09 编辑
loveblue 发表于 2011-9-20 14:40
能具体说明怎么实现吗,上面的是从别的地方粘过来的图,没有命令流,
  1. function mytest_plot_between_twoaxes
  2. close all
  3. h = figure('menubar','none','name','heart',...
  4.     'NumberTitle','off','Units','normalized ');
  5. subplot(211);
  6. fplot(@sin,[-pi,pi])
  7. subplot(212);
  8. fplot(@cos,[-pi,pi])
  9. xlabel({'\copyright Qibinbin','qibbxxt@126.com'});
  10. fl = false;
  11. set(h,'WindowButtonUpFcn',@myplot);
  12. setappdata(0,'mydata',fl);
  13.     function myplot(~,~)
  14.         xy = get(h, 'CurrentPoint');
  15.         fl = getappdata(0,'mydata');
  16.         if fl
  17.             xy0 = get(h,'userdata');
  18.             annotation(h,'line',[xy0(1),xy(1)],[xy0(2),xy(2)]);
  19.         else
  20.             set(h, 'userdata',xy);
  21.         end
  22.         fl = not(fl);
  23.         setappdata(0,'mydata',fl);
  24.     end
  25. end
复制代码

评分

1

查看全部评分

回复 不支持

使用道具 举报

 楼主| 发表于 2011-9-21 11:04:14 | 显示全部楼层 来自 黑龙江哈尔滨
本帖最后由 loveblue 于 2011-9-21 11:43 编辑

谢谢版主的耐心解答,应用命令 annotation(figure1,'line',[x1,x2], [y1,y2]);可以直接在figure图框内绘直线,但x1,x2,y1,y2坐标均为归一后的坐标值,请问有没有办法不用鼠标点,而直接用命令输入图1点坐标和图2点坐标值来绘直线,怎么通过命令实现呢?另外想绘虚线,有没有办法呢?
注:不希望通过点鼠标定点绘线
回复 不支持

使用道具 举报

发表于 2011-9-21 14:15:52 | 显示全部楼层 来自 河北廊坊
loveblue 发表于 2011-9-21 11:04
谢谢版主的耐心解答,应用命令 annotation(figure1,'line',[x1,x2], [y1,y2]);可以直接在figure图框内绘直 ...

这个你可以试一试
有个函数
  1. axes2pix
复制代码
可以将坐标转换
另外虚线是可以通过line对象的线型的属性来设置的
回复 不支持

使用道具 举报

 楼主| 发表于 2011-9-21 20:11:00 | 显示全部楼层 来自 黑龙江哈尔滨
qibbxxt 发表于 2011-9-21 14:15
这个你可以试一试
有个函数可以将坐标转换
另外虚线是可以通过line对象的线型的属性来设置的 ...

axes2pix函数是将轴坐标转换成像素坐标,
实现不了按图的实际坐标定点的目的。

点评

不明白你是什么意思?  发表于 2011-9-21 21:38
回复 不支持

使用道具 举报

发表于 2011-9-22 15:43:39 | 显示全部楼层 来自 河北廊坊
loveblue 发表于 2011-9-21 20:11
axes2pix函数是将轴坐标转换成像素坐标,
实现不了按图的实际坐标定点的目的。 ...

请你仔细的分析别人给你的建议,不用随意的下结论,下面是我用axes2pix实现这个功能的代码
  1. clear;clc;close all
  2. h = figure('menubar','none','name','heart',...
  3.     'NumberTitle','off','Units','pix ');
  4. ax(1) = subplot(211);
  5. fplot(@sin,[-pi,pi]);
  6. ax(2) = subplot(212);
  7. fplot(@cos,[-pi,pi]);
  8. set(ax,'unit','pix','NextP','Add');
  9. prompt = {'x1:','y1:','x2:','y2:'};
  10. dlg_title = '数据输入';
  11. num_lines = 1;
  12. def = {'1','0.5','2','-0.6'};
  13. p = inputdlg(prompt,dlg_title,num_lines,def);
  14. [x1,y1,x2,y2] = feval(@(x)x{:},num2cell(str2double(p)));
  15. plot(ax(1),x1,y1,'r*','Markers',18);
  16. plot(ax(2),x2,y2,'g*','Markers',18);
  17. pos = get(ax,'pos');
  18. posf = get(h,'pos');
  19. nx(1) = axes2pix(pos{1}(3),get(ax(1),'xlim'),x1) + pos{1}(1);
  20. ny(1) = axes2pix(pos{1}(4),get(ax(1),'ylim'),y1) + pos{1}(2);
  21. nx(2) = axes2pix(pos{2}(3),get(ax(2),'xlim'),x2) + pos{2}(1);
  22. ny(2) = axes2pix(pos{2}(4),get(ax(2),'ylim'),y2) + pos{2}(2);
  23. annotation(h,'line',nx/posf(3),ny/posf(4),...
  24.     'LineStyle','--','LineWid',4);
复制代码

评分

1

查看全部评分

回复 不支持

使用道具 举报

 楼主| 发表于 2011-9-22 22:02:58 | 显示全部楼层 来自 黑龙江哈尔滨
qibbxxt 发表于 2011-9-22 15:43
请你仔细的分析别人给你的建议,不用随意的下结论,下面是我用axes2pix实现这个功能的代码 ...

版主真是高人,太感谢了,向您学习!
回复 不支持

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

Simapps系列直播

Archiver|小黑屋|联系我们|仿真互动网 ( 京ICP备15048925号-7 )

GMT+8, 2024-10-6 09:02 , Processed in 0.087988 second(s), 17 queries , Gzip On, MemCache On.

Powered by Discuz! X3.5 Licensed

© 2001-2024 Discuz! Team.

快速回复 返回顶部 返回列表