2017-02-21 60 views
0

我想用刻度創建比例尺,並且我希望X和Y條上的刻度具有相同的物理長度,而不管相對長度,尺寸或軸的「模式」(至少在創建刻度時)。我希望daspect()能夠爲我提供我需要的信息,但daspect()對於查詢寬高比似乎是無用的。例如,如果我生成一個Matlab給出的XLim爲[0 3.5]和YLim爲[0 1]的圖,那麼無論我如何在屏幕上設置大小,daspect()都會給出[3.5 1 ...] 。這顯然不準確或有幫助。是否有另一個函數,或者可能使daspect()提供有用的信息而不操縱劇情?Matlab:創建沿每個軸具有相等物理長度的線

回答

0

daspect()返回典型圖上的垃圾。這是因爲拉伸到填充功能會扭曲填充圖形空間的繪圖,導致DataAspectRatio中的值不準確。可以找到關於延伸到填充的說明here

我還發現一個解決方法,如果你想離開拉伸到適合,這是暫時將PlotBoxAspectRatioMode設置爲'手動',它具有更改DataAspectRatio的值以匹配屏幕上的內容的效果。

figure;plot(0.1:0.1:pi,sin(0.1:0.1:pi)) 
pbaspect manual 
val = daspect 
pbaspect auto 

或者更安全的方式做到這一點,如果你想有一個普遍有用的腳本(如萬一PlotBoxAspectRatioMode已經是手動和你不想改變這種狀況)將是:

pbaspectMode = get(gca,'PlotBoxAspectRatioMode'); 
pbaspect manual; 
val = daspect; 
set(gca,'PlotBoxAspectRatioMode',pbaspectMode); 

我但是,我不確定這是否會產生間歇或有害的副作用。

據Mathworks公司的支持:

bpaspect設置爲手動,然後再可能是「安全的」(雖然如果有副作用,我也不會感到驚訝)的技術,而是一種更好的方式劃分:

real_daspect = daspect./pbaspect;