2017-07-10 77 views
-1

我应该如何在剧情中添加文字以便自动缩放当我制作放大缩小范围?在放大或缩小时Matlab - 放大缩小文字

两个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 

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

回答

2

text object has property FontUnits。如果它设置为标准化为,则文本将使用坐标轴重新缩放。

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

然后尝试更改轴的大小。

+0

不,当我进行缩放时,文本不会缩放。它保持恒定的大小,并随着图形变化,而不是在轴上的变焦。我正在寻找完全相反的,文字扩大或缩小根据轴放大... – hyprfrcb

+0

不知道你如何测试它。这对我来说很有用。以下是“Normalized”FontUnit的文档说明:“将字体大小解释为坐标轴高度的一部分,如果调整坐标轴的大小,则字体大小会相应地进行修改,例如,如果FontSize为0.1,以标准化单位为单位,则文字是情节盒高度的1/10“。 –

+0

检查编辑是否有更清晰的参数。当我放大或缩小文字时,文字必须重新缩放。你可以看到我的尝试失败。 – hyprfrcb