2013-11-04 84 views
2

我已经在Matlab以下情节:缩放图像以适合文本框周围的边框

Plot with text labels at top and left

的图像尺寸可能会有所不同,因此可能的文本框顶部的长度和离开。我动态地确定去这些文本框中的字符串,然后用创建它们:

[M,N] = size(img); 
imagesc((1:N)-0.5,(1:M)-0.5, img > 0.5); axis image; grid on; 
colormap([1 1 1; 0.5 0.5 0.5]); 
set(gca,'XColor','k','YColor','k','TickDir','out') 
set(gca,'XTick',1:N,'XTickLabel',cell(1,N)) 
set(gca,'YTick',1:N,'YTickLabel',cell(1,N)) 

for iter = 1:M 
    text(-0.5, iter-0.5, sprintf(strL, br{iter,:}), ... 
     'FontSize',16, ... 
     'HorizontalAlignment','right', ... 
     'VerticalAlignment','middle', ... 
     'Interpreter','latex'); 
end 

for iter = 1:N 
    text(iter-0.5, -0.5, {bc{:,iter}}, ... 
     'FontSize',16, ... 
     'HorizontalAlignment','center', ... 
     'VerticalAlignment','bottom', ... 
     'Interpreter','latex'); 
end 

其中brbc是包含标签适当的数字单元阵列。问题在于大多数时候,文字会被图形的边缘所剪裁。我用这作为一种解决方法:

set(gca,'Position',[0.25 0.25 0.5 0.5]); 

正如你所看到的,我简单地增加周围的情节较大的边界,从而有文本更多的空间。虽然这种缩放适用于一个缩放级别,但是如果我最大化绘图窗口,则会获得太多空间,如果我缩小绘图窗口,则会再次剪裁。有没有更智能的方法来添加这些标签以使用最小的空间量,同时确保文本不被剪切?

编辑:

我曾尝试TextZoomable包由Bas Swinckels建议并帮助了很多与变焦的问题,但我还是必须使用set(gca,'Position',[0.25 0.25 0.5 0.5])解决办法,以适应可缩放文本。这并不理想,因为当字符串太长时,我仍然会剪裁。我仍然有兴趣找到一种解决方案,我可以保证文本不会被剪辑。从那里我可以使用TextZoomable,如果我想防止削减,因为数字缩放。

+0

轴的定位不是Matlab的最强点。对于一个真正的解决方案,你可能应该根据标签的长度来计算轴的位置。对于懒惰的解决方案,只需创建一个大的空间并用图像编辑器切掉空白。但是这些难题很有趣,我曾经在python中写过一些求解器... –

+0

我不介意这么做,我只是无法理解如何去做。我不断遇到的问题是,当我调整图形大小时,图像缩放会发生变化,但文本缩放不会。为了在每次数字位置/大小改变时计算新的绘图大小,我是否必须以某种方式挂钩图形大小调整功能? – nispio

回答

1

您希望在移动/缩放/拉伸图像时缩放文字。您可能会在文件交换中看到this解决方案。我自己并没有使用它,所以我不知道你是否可以按原样使用它。但是,也许源代码可以给你一些解决方案的启发。

+0

'TextZoomable'包实际上工作得非常好,而且我可以用'TextZoomable'调用将我的调用替换为'text',而无需做任何其他更改! – nispio

+0

尽管这个答案并没有达到我所追求的目标(请参阅编辑我的问题),但我将其标记为答案,因为它是提供的最佳答案。 :) – nispio