【问题标题】:Matlab - Text Rescaling with Zoom InMatlab - 放大文本缩放
【发布时间】:2017-07-10 23:34:38
【问题描述】:

当我进行放大缩小时,我应该如何在绘图中添加文本以便自动缩放?

FontUnits 选项,normalizedpixels 在放大或缩小时重新缩放。

figure(1);
text(0.5,0.5,'test',...
    'FontUnits','Normalized',...
    'FontSize',0.25,...
    'HorizontalAlignment','center',...
    'Color',color...
    );
figure(2);
set(gcf,'Position',[935   428   672   504])
text(50,50,'test',...
    'FontUnits','pixels',...
    'FontSize',100,...
    'HorizontalAlignment','center',...
    'Color',color...
    );
axis([0 100 0 100])

这个函数,包括对 zoomCallBack 函数的进一步修改:

function drawtext(p,s,f,color)
    % get axes size
    ax = axis;
    % add some text
    ax0=ax(4)-ax(3);
    txt = text(p(1),p(2),s,...
        'FontSize',f,...
        'HorizontalAlignment','center',...
        'Color',color);
    h = zoom; % get handle to zoom utility
    set(h,'ActionPostCallback',@zoomCallBack);
    set(h,'Enable','on');
    % everytime you zoom in, this function is executed
    function zoomCallBack(obj, evd)      
        % Since i expect to zoom in ax(4)-ax(3) gets smaller, so fontsize
        % gets bigger.
        ax = axis(evd.Axes); % get axis size
        % get all texts in figure
        htxt = findobj(gcf,'Type','text');
        axi=ax(4)-ax(3);
        for i=1:length(htxt)
            % change font size accordingly
            set(htxt(i),'FontSize',str2num(get(htxt(i),'Tag'))*ax0/axi);
        end
    end
end

这是一个可行的解决方案,但是非常棘手并且有时会失败。欢迎任何更好的解决方案。

【问题讨论】:

    标签: matlab text zooming rescale


    【解决方案1】:

    text 对象具有属性 FontUnits。如果设置为Normalized,文本将随轴重新缩放。

    text(0.4, 0.5, 'test', 'FontUnits', 'Normalized', 'FontSize', 0.2);
    

    然后尝试更改轴大小。

    【讨论】:

    • 不,当我进行缩放时,文本不会被缩放。它保持一个恒定的大小,并随图形而变化,而不是随轴上的缩放而变化。我正在寻求完全相反的文本,根据轴缩放放大或缩小...
    • 不知道你是怎么测试的。这对我来说很有用。以下是“标准化”FontUnit 的文档说明:“将字体大小解释为轴绘图框高度的一部分。如果调整轴大小,字体大小会相应修改。例如,如果 FontSize 以标准化单位为 0.1,则文本是绘图框高度的 1/10。”。
    • 检查编辑以获得更清晰的论点。当我放大或缩小时,文本必须重新缩放。如您所见,我的尝试失败了。
    • 当我们通过 set 命令改变坐标轴大小时,文本会重新缩放,但在我们放大或缩小时它不会改变。 get(ax, 'xlim') 显示它在缩放后发生了变化。这有点奇怪。我能想到一个愚蠢的方法来实现文本缩放。只需使用默认的 FontUnits。您可以将当前的 xlimylim 存储在图形或其他对象的 UserData 中,并在您的 zoomCallBack 中,您获取新的xlim*/*ylim,并计算缩放因子,然后相应地更改字体大小。
    • 我把它放在建议的代码上。不太好,但...有效。
    猜你喜欢
    • 1970-01-01
    • 2012-03-31
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多