1.與位置相關的屬性和函數
????????有幾個屬性和函數可用于獲取和設置坐標區的大小與位置。下表摘要顯示了這些屬性和函數。
函數或屬性 | 描述 |
---|---|
OuterPosition?屬性 | 使用此屬性可以查詢或更改坐標區的外邊界,包括標題、標簽和邊距。要更改外邊界,請將此屬性指定為? |
Position?屬性 | 使用此屬性可以查詢或更改繪圖區域,此區域通常由圖框限定。此區域不包括標題、標簽以及標題和標簽周圍的邊距。要更改繪圖區域的大小,請將此屬性指定為? |
tightPosition?函數?(自 R2022b 起) | 使用此函數可以查詢繪圖區域,此區域通常由圖框限定。對于具有約束縱橫比的坐標區(如方形坐標區、極坐標區或包含圖像的坐標區),該函數通常能返回比? |
TightInset?屬性 | 使用此屬性可以查詢包含標題、刻度標簽和軸標簽在內的圖框周圍的邊距。在添加軸標簽和標題時,MATLAB??會更新此屬性以適應文本。 |
PositionConstraint?屬性?(自 R2020a 起) | 使用此屬性可以查詢或控制在添加標題或標簽時是保留繪圖區域(坐標區內)還是保留坐標區的外邊界。要更改保留坐標區的哪些區域,請將此屬性指定為? |
Units?屬性 | 使用此屬性可以查詢或更改坐標區位置值的單位。值必須設置為? |
axis?函數 | 使用此函數可調整坐標區范圍或縱橫比,而無需執行計算或設置特定屬性。例如:
|
2.位置和邊距的邊界
????????下圖顯示了一個二維視圖,其中?OuterPosition
?值定義紅色區域、Position
?值定義藍色區域,以及基于?Position
?外擴?TightInset
?值所定義的品紅色區域。
????????下圖顯示了一個三維視圖,同樣包含了由?OuterPosition
?值定義的坐標區外邊界區域(紅色)、Position
?值定義的坐標區內邊界區域(藍色),以及在?Position
?內邊界基礎上外擴?TightInset
?值所定義的坐標區區域(品紅色)。
3.方形或具有約束縱橫比坐標區的位置
????????自 R2022b 起如果坐標區具有約束縱橫比,例如,如果您正在繪制一個圖像,Position?屬性和?tightPosition?函數返回不同結果。根據您要創建的演示內容的類型,使用其中一項。
????????例如,顯示圖像。使用?axis?函數保留圖像的縱橫比。
figure
C = imread("ngc6543a.jpg");
ax = axes;
image(C)
axis image
????????通過調用?tightPosition
?函數獲得位置向量。使用向量在當前顯示在坐標區中的圖像周圍繪制紅色矩形。
tpos = tightPosition(ax);
annotation("rectangle",tpos,Color="red",LineWidth=2)
????????通過查詢坐標區的?Position
?屬性獲得另一個位置向量。使用向量繪制一個藍色矩形,該矩形定義類似大小的圖像的繪圖區域,但具有默認縱橫比。當顯示一系列具有不同縱橫比的多個圖像時,該向量中的值對查詢整個圖像區域可能會有所幫助。
pos = ax.Position;
annotation("rectangle",pos,Color="blue",LineWidth=2)
4.控制自動調整大小行為
????????某些情況可能觸發?Axes
?對象自動調整大小。例如,以交互方式調整圖窗大小或添加標題或軸標簽將激活自動調整大小。有時,新坐標區的大小無法同時滿足?Position
?和?OuterPosition
?值,這種情況下需要使用?PositionConstraint
?屬性來指示要保留哪個值。
????????將?PositionConstraint
?屬性指定為下列值之一:
-
"outerposition"
?- 保留?OuterPosition
?值。如果不希望坐標區或任何周圍文本超出特定外邊界,可使用此選項。MATLAB 會調整坐標區內部區域大小(顯示繪圖時),以盡力在外邊界范圍內適應內容。 -
"innerposition"
?- 保留?InnerPosition
?值。如果希望坐標區的內部區域在圖窗中保持特定大小,可使用此選項。此選項有時會導致文本溢出圖窗。
????????在 R2020a 之前: 使用?ActivePositionProperty
?和值?"outerposition"
?或?"position"
。
????????通常,將?PositionConstraint
?屬性設置為?"outerposition"
?更可取。但是,坐標區標題或標簽過長可能會使坐標區內部區域大大縮小,文字過小而難于閱讀。在這種情況下,最好保持特定大小的內部坐標區,即使周圍文本溢出了圖窗也應如此。
????????例如,創建一個帶有兩個坐標區的圖窗,并為每個坐標區位置指定相同的寬度和高度。對于上坐標區,將?PositionConstraint
?屬性設置為?"outerposition"
,對于下坐標區則設置為?"innerposition"
。注意,在上坐標區中,內部區域會縮小以適應文本,但文本不會溢出圖窗。在下坐標區中,會保留內部區域的大小,但部分文本被截斷。
figure;
ax1 = axes("Position",[0.13 0.58 0.77 0.34]);
ax1.PositionConstraint = "outerposition";
plot(ax1,1:10)
title(ax1,"Preserve OuterPosition")
yticklabels(ax1,["My incredibly descriptive, excessively wordy, and overly long label",..."label 2","label 3"])ax2 = axes("Position",[0.13 0.11 0.77 0.34]);
ax2.PositionConstraint = "innerposition";
plot(ax2,1:10)
title(ax2,"Preserve Position")
yticklabels(ax2,["My incredibly descriptive, excessively wordy, and overly long label",..."label 2","label 3"])
5.伸展填充行為
????????默認情況下,MATLAB 會伸展坐標區以填充可用的空間。這種“伸展填充”行為可能會導致部分扭曲。坐標區可能與其?DataAspectRatio
、PlotBoxAspectRatio
?和?CameraViewAngle
?屬性中存儲的數據縱橫比、圖框縱橫比和相機視角值不完全匹配。Axes
?對象的?DataAspectRatioMode
、PlotBoxAspectRatioMode
?和?CameraViewAngleMode
?屬性設置為?"auto"
?時,會啟用“伸展填充”行為。
????????如果您指定數據縱橫比、繪圖框縱橫比或相機視角,則會禁用“伸展填充”行為。如果禁用“伸展填充”行為,MATLAB 會使坐標區在可用空間內盡可能大并嚴格遵循屬性值,不會出現扭曲。
????????例如,以下圖窗分別顯示了同一繪圖在啟用和未啟用“伸展填充”行為時的效果。在兩種情況中,數據縱橫比、繪圖框縱橫比和相機視角值是相同的。但是,在左側繪圖中,伸展造成了一定的變形。
啟用伸展填充(一定的變形) | 禁用伸展填充(無變形) |
---|---|
| |