作者diva (Tremendo!)
看板MATLAB
标题[问题] 得到plot的zoom的大小
时间Fri May 4 18:07:07 2012
在画图时
figure的menu上
有可以zoom in zoom out 的两个按钮
可以放大和缩小图
比方说我zoom in了两次
我该如何让程式知道我目前的图已经zoom了多少次了吗?
我的问题是发生在
我想在一张figure上
在滑鼠点击的位置画出一个红色点
并且可以配合zoom in使用
程式码如下
f=figure(1) ;
imshow('cell.tif') ;
set(f,'windowbuttondownfcn',[' ;' ...
'imshow(''cell.tif'') ;' ...
'hold on ;' ...
'CurrentPt=get(gca,''CurrentPoint'') ;' ...
'plot(CurrentPt(1,1),CurrentPt(1,2),''ro'') ;' ...
'hold off;']) ;
可是每次zoom in完
点击下一个点後
图片又会zoom out回原始大小
不知道有没法可以克服
只要能得到zoom了几次的值
或许可以利用zoom(Factor)来设定
--
1F:推 okgogogo:set第二行imshow去掉 05/04 23:21
2F:→ okgogogo:想知道zoom情况,自己写个UI按钮 可参考help camva 范例 05/04 23:24
3F:→ diva:imshow不能去掉 理由是 我希望图上只能有一个红圈 05/05 19:59
4F:→ diva:如果imshow去掉 又hold on 则红圈会随着滑鼠点击越来越多 05/05 20:00
5F:→ diva:如果imshow保留 hold off 则只有红圈 而无底图 05/05 20:00
6F:→ diva:camva刚试过并不合用 理由是 camva会把axes的框整个放大缩小 05/05 20:01
7F:→ diva:和zoom的只放大缩小图片 而axes大小不变 有差异 05/05 20:02
8F:→ diva:还是谢谢你的回答 05/05 20:02
我後来自己把问题解决了一半
把程式加上2行就可以了
f=figure(1) ;
imshow('cell.tif') ;
set(f,'windowbuttondownfcn',[' ;' ...
'zoom reset ;' ...
'imshow(''cell.tif'') ;' ...
'zoom out ;' ...
'hold on ;' ...
'CurrentPt=get(gca,''CurrentPoint'') ;' ...
'plot(CurrentPt(1,1),CurrentPt(1,2),''ro'') ;' ...
'hold off;']) ;
zoom reset 设定目前zoom的状态为起始状态
zoom out 返回zoom的原始状态
但是还是有一个问题
这麽做的话
点选figure上的zoom out按钮
就没办法恢复成图片的原始大小了
不知道有没有办法可以解决
※ 编辑: diva 来自: 140.112.103.220 (05/05 20:14)
9F:推 okgogogo:只有一个红点,不应该重新plot应该用set改变 05/05 20:50
10F:→ okgogogo:我的程式plot只会出现第一次,之後都用set, 05/05 20:50
11F:→ okgogogo:你一用它内建绘图指令,属性都会被改变像bar指令 05/05 20:51
12F:→ okgogogo:你图应该也只是载入一次,其他是改变轴之类的... 05/05 20:52
的确 如你所说
set可以解决zoom的问题
感谢!!
另外想请问一下
你提到应该用set而不是重画
请问用set有什麽好处吗?
因为set和重画比起来
程式量好像差不多
针对我原来的写法
我也找到解决的方法了
f=figure(1) ;
imshow('cell.tif') ;
set(f,'windowbuttondownfcn',[' ;' ...
' ;' ...
' ;' ...
'XLim=get(gca,''XLim'') ;' ...
'XTick=get(gca,''XTick'') ;' ...
'XTickLabel=get(gca,''XTickLabel'') ;' ...
'YLim=get(gca,''YLim'') ;' ...
'YTick=get(gca,''YTick'') ;' ...
'YTickLabel=get(gca,''YTickLabel'') ;' ...
' ;' ...
'imshow(''cell.tif'') ;' ...
' ;' ...
' ;' ...
'set(gca,''XLim'',XLim) ;' ...
'set(gca,''XTick'',XTick) ;' ...
'set(gca,''XTickLabel'',XTickLabel) ;' ...
'set(gca,''YLim'',YLim) ;' ...
'set(gca,''YTick'',YTick) ;' ...
'set(gca,''YTickLabel'',YTickLabel) ;' ...
' ;' ...
'hold on ;' ...
'CurrentPt=get(gca,''CurrentPoint'') ;' ...
'plot(CurrentPt(1,1),CurrentPt(1,2),''ro'') ;' ...
'hold off;']) ;
※ 编辑: diva 来自: 140.112.103.220 (05/05 22:29)
※ 编辑: diva 来自: 140.112.103.220 (05/05 22:30)