2017-04-05 91 views
2

我按照this question中的步驟操作,並試圖用較大的字體設置單個文本對象。這裏是我的示例代碼:在增加字體大小後截斷標籤文本

hf = figure; 
set(hf, 'DefaultAxesFontSize', 14) 
hx = axes('Parent',hf); 
[hx,hp1,hp2] = plotyy(hx, rand(10,1),rand(10,1),rand(10,1),rand(10,1),'scatter'); 
hlx = xlabel(hx(1), 'Only half of this line show up'); 
hl1 = ylabel(hx(1), 'Not usually truncated but less border'); 
hl2 = ylabel(hx(2), 'Only part of this line show up'); 
ht = title(hx(1), 'Too close to border'); 

從圖中可以看出,標籤被圖形的邊界截斷。爲了揭示所有文字,我必須將這個數字拖到非常大的位置 - 與所期望的相反 - 。

figure window

我怎麼能自動根據文本字體大小設置文本框,因此,即使是小圖他們沒有得到削減?

我知道我可以通過設置軸的Position來手動完成它,但它是一種手動和猜測的嘗試。有沒有自動計算邊距的方法?

回答

0

可以做的一件事是根據新的文字字體大小計算增加的​​邊距。假設我們知道Matlab的默認字體大小是10,否則通過get(hf,'DefaultAxesFontSize')得到它。

然後獲取軸的相對位置get(hx, 'Position'),它給出了四個百分比值。前兩個定義左邊界和下邊界。由於它是用於標籤的,因此將字體大小從10增加到14意味着文本框應該增長1.4倍。接下來的兩個數字定義了軸的大小。由於兩邊的文本框增長1.4倍,假設原始大小爲x,則新大小爲1 - [(1-x)* 1.4] = 1.4x - 0.4。

建議的解決方法:

hf = figure; 
set(hf, 'DefaultAxesFontSize', 14) 
hx = axes('Parent',hf); 
set(hx, 'Position', [1.4 1.4 1.4 1.4].*get(hx, 'Position')+ [0 0 -.4 -.4]) 
[hx,hp1,hp2] = plotyy(hx, rand(10,1),rand(10,1),rand(10,1),rand(10,1),'scatter'); 
hlx = xlabel(hx(1), 'Only half of this line show up'); 
hl1 = ylabel(hx(1), 'Not usually truncated but less border'); 
hl2 = ylabel(hx(2), 'Only part of this line show up'); 
ht = title(hx(1), 'Too close to border'); 

您可以與(更大,希望)字體大小的原始尺寸爲10

fixed result

新分配之間的比率並更換手動輸入的號碼 1.4