作者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)