2017-07-10 215 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