我已经在Matlab以下情节:缩放图像以适合文本框周围的边框
的图像尺寸可能会有所不同,因此可能的文本框顶部的长度和离开。我动态地确定去这些文本框中的字符串,然后用创建它们:
[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
其中br
和bc
是包含标签适当的数字单元阵列。问题在于大多数时候,文字会被图形的边缘所剪裁。我用这作为一种解决方法:
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,如果我想防止削减,因为数字缩放。
轴的定位不是Matlab的最强点。对于一个真正的解决方案,你可能应该根据标签的长度来计算轴的位置。对于懒惰的解决方案,只需创建一个大的空间并用图像编辑器切掉空白。但是这些难题很有趣,我曾经在python中写过一些求解器... –
我不介意这么做,我只是无法理解如何去做。我不断遇到的问题是,当我调整图形大小时,图像缩放会发生变化,但文本缩放不会。为了在每次数字位置/大小改变时计算新的绘图大小,我是否必须以某种方式挂钩图形大小调整功能? – nispio