loveblue 发表于 2011-9-20 13:45:00

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

本帖最后由 loveblue 于 2011-9-20 14:09 编辑

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

qibbxxt 发表于 2011-9-20 14:33:58

本帖最后由 qibbxxt 于 2011-9-20 14:52 编辑

你给的图形上面不是已经实现了这个功能吗?
我的想法是可以在建立一个axes,让其隐藏
或者可以用
annotation(figure1,'line',,...
    );这样的方式实现,这里的坐标是针对figure1的

loveblue 发表于 2011-9-20 14:40:01

能具体说明怎么实现吗,上面的是从别的地方粘过来的图,没有命令流,

qibbxxt 发表于 2011-9-20 17:08:01

本帖最后由 qibbxxt 于 2011-9-20 17:09 编辑

loveblue 发表于 2011-9-20 14:40 static/image/common/back.gif
能具体说明怎么实现吗,上面的是从别的地方粘过来的图,没有命令流,
function mytest_plot_between_twoaxes
close all
h = figure('menubar','none','name','heart',...
    'NumberTitle','off','Units','normalized ');
subplot(211);
fplot(@sin,[-pi,pi])
subplot(212);
fplot(@cos,[-pi,pi])
xlabel({'\copyright Qibinbin','qibbxxt@126.com'});
fl = false;
set(h,'WindowButtonUpFcn',@myplot);
setappdata(0,'mydata',fl);
    function myplot(~,~)
      xy = get(h, 'CurrentPoint');
      fl = getappdata(0,'mydata');
      if fl
            xy0 = get(h,'userdata');
            annotation(h,'line',,);
      else
            set(h, 'userdata',xy);
      end
      fl = not(fl);
      setappdata(0,'mydata',fl);
    end
end

loveblue 发表于 2011-9-21 11:04:14

本帖最后由 loveblue 于 2011-9-21 11:43 编辑

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

qibbxxt 发表于 2011-9-21 14:15:52

loveblue 发表于 2011-9-21 11:04 static/image/common/back.gif
谢谢版主的耐心解答,应用命令 annotation(figure1,'line',, );可以直接在figure图框内绘直 ...

这个你可以试一试
有个函数axes2pix可以将坐标转换
另外虚线是可以通过line对象的线型的属性来设置的

loveblue 发表于 2011-9-21 20:11:00

qibbxxt 发表于 2011-9-21 14:15 static/image/common/back.gif
这个你可以试一试
有个函数可以将坐标转换
另外虚线是可以通过line对象的线型的属性来设置的 ...

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

qibbxxt 发表于 2011-9-22 15:43:39

loveblue 发表于 2011-9-21 20:11 static/image/common/back.gif
axes2pix函数是将轴坐标转换成像素坐标,
实现不了按图的实际坐标定点的目的。 ...

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

loveblue 发表于 2011-9-22 22:02:58

qibbxxt 发表于 2011-9-22 15:43 static/image/common/back.gif
请你仔细的分析别人给你的建议,不用随意的下结论,下面是我用axes2pix实现这个功能的代码 ...

版主真是高人,太感谢了,向您学习!
页: [1]
查看完整版本: 不同子图间的连线怎样用命令流实现