[問題] 得到plot的zoom的大小

看板MATLAB作者 (Tremendo!)時間12年前 (2012/05/04 18:07), 編輯推噓2(2010)
留言12則, 2人參與, 最新討論串1/2 (看更多)
在畫圖時 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)來設定 --

05/04 23:21, , 1F
set第二行imshow去掉
05/04 23:21, 1F

05/04 23:24, , 2F
想知道zoom情況,自己寫個UI按鈕 可參考help camva 範例
05/04 23:24, 2F

05/05 19:59, , 3F
imshow不能去掉 理由是 我希望圖上只能有一個紅圈
05/05 19:59, 3F

05/05 20:00, , 4F
如果imshow去掉 又hold on 則紅圈會隨著滑鼠點擊越來越多
05/05 20:00, 4F

05/05 20:00, , 5F
如果imshow保留 hold off 則只有紅圈 而無底圖
05/05 20:00, 5F

05/05 20:01, , 6F
camva剛試過並不合用 理由是 camva會把axes的框整個放大縮小
05/05 20:01, 6F

05/05 20:02, , 7F
和zoom的只放大縮小圖片 而axes大小不變 有差異
05/05 20:02, 7F

05/05 20:02, , 8F
還是謝謝你的回答
05/05 20:02, 8F
我後來自己把問題解決了一半 把程式加上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)

05/05 20:50, , 9F
只有一個紅點,不應該重新plot應該用set改變
05/05 20:50, 9F

05/05 20:50, , 10F
我的程式plot只會出現第一次,之後都用set,
05/05 20:50, 10F

05/05 20:51, , 11F
你一用它內建繪圖指令,屬性都會被改變像bar指令
05/05 20:51, 11F

05/05 20:52, , 12F
你圖應該也只是載入一次,其他是改變軸之類的...
05/05 20:52, 12F
的確 如你所說 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)
文章代碼(AID): #1FewfDWp (MATLAB)
文章代碼(AID): #1FewfDWp (MATLAB)