0

いくつかの光学データをローレンツ発振器の合計に適合させてから、元のデータと適合を使用して図を吐き出すスクリプトがあります。また、フィッティングパラメータのテーブルにテキスト注釈を含めたいのですが、テキストボックスで行と列を取得する方法がわかりません。

各ピークには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)

その結果、テキストは1列になり、行はなくなります。私の2番目の試みは、各列を分割することです。

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

これはほぼ機能しますが、ラベルの添え字は最後の数行の垂直方向の配置を外し、間隔を正しくするために過度の調整が必要です。実際のモデリングを行うよりも、テキストボックスを正しく表示するために多くの時間を費やしています。

ラベルと変数の両方を含むテキストのブロックをプログラムで行と列にフォーマットし、ユーザーのいじりを最小限に抑えて図のテキスト注釈として使用するにはどうすればよいですか?

4

1 に答える 1

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    
于 2013-03-18T19:18:49.993 に答える