2017-04-05 95 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