2013-03-18 73 views
0

我有一個腳本,它適合一些洛倫茲振盪器的光學數據,然後吐出一個數字與原始數據和擬合。我還想包含一個帶有擬合參數表的文本註釋,但無法弄清楚如何在我的文本框中獲取行和列。如何將MATLAB圖形文本註釋格式化爲行和列?

每個峯有3個參數,然後有3個更多的全局擬合參數。我的第一個嘗試是這樣做的:

ParamTableLabels = {'\omega_p (cm^{-1})', '\omega_0 (cm^{-1})', '\Gamma (cm^{-1})'}; 
ParamTableVals = num2cell(Ef); 
ParamTableLabels2 = {'d (\mu{m})','\epsilon_\infty','Scale'}; 
ParamTableVals2 = {ThickFit,EinfFit,ScaleFit}; 
ParamTable = vertcat(ParamTableLabels,ParamTableVals,ParamTableLabels2,ParamTableVals2); 

其中Ef是我的3xN擬合參數矩陣。產生我的身影后,我嘗試把該表在我的劇情在一組合適的座標的X,Y使用:

text(X,Y,ParamTable) 

,結果是文本,沒有行的一列。我的第二次嘗試,哪種類型的作品是打破了每列:

text(X,  Y,ParamTable(:,1)); 
text(X+dX, Y,ParamTable(:,2)); 
text(X+2*dX,Y,ParamTable(:,3)); 

這幾乎工作,但在標籤上標甩開最後幾排的垂直對齊方式,它需要的不適當量修補以獲得正確的間距。我花更多的時間試圖讓文本框看起來比正確的建模。

如何以編程方式將包含標籤和變量的文本塊格式化爲行和列,然後在最小用戶修補的情況下將其用作文本註記?

+0

我總是很高興,當包含的代碼是獨立的可執行文件。 EG,這個代碼缺少'Ef','ThickFit'等的定義,即使你編制了隨機數據。 – Pursuit 2013-03-18 19:11:40

回答

0

這是使用基本命令得不到很好的支持。但你至少可以通過讓Matlab爲你完成工作來猜測隨後的X位置。

關鍵是"Extent"附加到文本塊的只讀參數。使用docsearch text properties來查看文檔。

把這個放入一些代碼:

 padFraction = 0.1; %This is roughly the unitless padding between columns, as a fraction of the column on the left. 
     curX = X;   %Leave the initial X variable unchanged 


     %For each text block column, add the text block, get the extent, and adjust curX 
     h = text(curX,  Y,ParamTable(:,1)); 
     curExtent = get(h, 'Extent'); 
     curX = curExtent(1) + curExtent(3)*(1+padFraction); 

     h = text(curX, Y,ParamTable(:,2)); 
     curExtent = get(h, 'Extent'); 
     curX = curExtent(1) + curExtent(3)*(1+padFraction); 

     text(curX,Y,ParamTable(:,3)); 

用來生成/測試的完整腳本如下:

ParamTableLabels = {'\omega_p (cm^{-1})', '\omega_0 (cm^{-1})', '\Gamma (cm^{-1})'}; 

Ef = round(rand(10,3)*100); 
ParamTableVals = num2cell(Ef); 
ParamTableLabels2 = {'d (\mu{m})','\epsilon_\infty','Scale'}; 
ParamTableVals2 = {'ThickFit','EinfFit','ScaleFit'}; 
ParamTable = vertcat(ParamTableLabels,ParamTableVals,ParamTableLabels2,ParamTableVals2); 

X = 1; Y = 1.1; 


%Put something in the plot 
figure(1); clf; hold on; 
plot(-10:10, randn(21,1)*20,'.'); 

codeblock = 3; 
switch codeblock 
    case 1 
     text(X,Y,ParamTable) 

    case 2 
     dX = 3; 
     text(X,  Y,ParamTable(:,1)); 
     text(X+dX, Y,ParamTable(:,2)); 
     text(X+2*dX,Y,ParamTable(:,3)); 

    case 3 
     padFraction = 0.1; 
     curX = X; 

     h = text(curX,  Y,ParamTable(:,1)); 
     curExtent = get(h, 'Extent'); 
     curX = curExtent(1) + curExtent(3)*(1+padFraction); 

     h = text(curX, Y,ParamTable(:,2)); 
     curExtent = get(h, 'Extent'); 
     curX = curExtent(1) + curExtent(3)*(1+padFraction); 

     text(curX,Y,ParamTable(:,3)); 
end  
+0

這非常有幫助。下標和上標依然混淆了每列的垂直範圍,因此表格的底部是粗糙的,但使用「範圍」,我想我可以將標題和數字作爲單獨的文本塊並對齊它們。 – craigim 2013-03-18 20:27:01

相關問題