2016-09-13 51 views
11

我在previous question上得到了答案。但是,要獲得這些座標(在axis equal的情況下,軸箱的尺寸和位置),我們需要做一些相對麻煩的計算。但是,由於MATLAB圖形基於Java,我們可以訪問Java屬性。 我已經發現,如果我們使用這個在MATLAB:如何獲取JFrame中軸框的邊界?

jFrame = get(gcf,'JavaFrame'); 
BoxHeight = jFrame.getAxisComponent.getHeight; 
BoxWidth = jFrame.getAxisComponent.getWidth; 

我們可以得到的圖形窗口的寬度和高度(也許這可以與軸的部件相關聯)。但是在像素單位的情況下它們與get(gcf, 'Position')get(gca, 'Position')的值不同。我不是Java的專家(我也未嘗試使用Altman的findjobj來查找這些屬性)。

因此,我有兩個問題:

  1. 爲什麼圖窗口的高度和寬度(也許這是軸框)從MATLAB和Java的屬性導出是不一樣的(至少它們是Java中的整數和MATLAB中的浮點數)?

例如:

hf=figure('units','pixels'); ha=gca(hf); 
set(ha,'units','pixels'); 
get(hf,'position') 
get(ha,'position') 

ANS =

488 342 560 420 
73.8000 47.2000 434.0000 342.3000` 

BoxHeight=525BoxWidth=700和換檔始終爲零(alignmentX=0.0alignmentY=0.0)。

  1. 如何獲得使用Java在MATLAB 中繪製的窗口軸的確切大小和位置?
+1

不是你提到的相對於圖的框架?從我看到的例子中,java框架組件總是與圖的尺寸相匹配。至於軸的高度/寬度(以相對於該圖標準化的單位),它們應該在ha.Position中,其中「ha」是相應的軸手柄。你可以使用Matlab獲得精確的像素大小,通過設置ha.Units ='像素',然後用ha.Position = [x y width height]設置所需的大小。 – serigado

+1

你在什麼操作系統上?在Linux上,它們返回相同的大小。 – Suever

+1

嗨serigado!非常感謝您的關注。我的Matlab(get(gca,'Position'))給出像素的浮點數(set(gca,'Units','Pixels'))。我爲我的問題添加了一個例子。 –

回答

1

在MATLAB中,既有figureaxes有一個名爲Position屬性,但它不是同一件事:

get(hf,'position')會給你position of the figure window on screen
get(ha,'position')將返回position of the axes within the figure window

因此,該代碼的輸出

hf=figure('units','pixels'); 
ha=gca(hf); 
set(ha,'units','pixels'); 
hfPos = get(hf,'position') 
haPos = get(ha,'position') 

ANS =

hfPos = 520 378 560 420 
haPos = 73.8000 47.2000 434.0000 342.3000 

有這樣解釋: this

但是,我不知道爲什麼get(ha,'position')收益浮動點數。

在我的系統(Win7的臨,MATLAB R2016a,爪哇1.7.0_60-B19)下面的代碼發出警告:

get(gcf,'JavaFrame'); 
Warning: figure JavaFrame property will be obsoleted in a future release. For more information see the JavaFrame resource on the MathWorks web site. 

所以我不會依賴於使用它。相反,我將使用上面的信息來獲取MATLAB中繪製的座標軸的大小和位置。

+1

感謝您的回答。你讀過我的[上一個問題](http://stackoverflow.com/questions/39395912/matlab-the-exact-size-and-position-of-the-axis-box-in-the-case-of-axis - 等於)並回答它?主要的問題是'get(ha,'position')'在'axis equal'情況下與真實座標軸不一致。關於警告,不要擔心這只是一個警告。我們可以禁止它:'warning('off','MATLAB:HandleGraphics:ObsoletedProperty:JavaFrame')' –

+0

另一個問題是爲什麼在移動窗口或調整窗口大小後,hfPos中的int變成雙精度。 – toshiomagic