我按照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');
从图中可以看出,标签被图的边框截断。我必须将图形拖到非常大的位置 - 与期望相反 - 以显示所有文本。
如何根据文字字体大小自动设置文本框,这样即使是小图表也不会被剪切?
我知道我可以通过设置轴的Position
手动完成它,但它是一种手动和猜测。有没有自动计算边距的方法?
答案 0 :(得分: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');
您可以将手动输入的数字1.4
替换为新分配的(较大的,希望的)字体大小与原始大小10之间的比率。