ドキュメンテーション センター

  • 評価版
  • 製品アップデート

最新のリリースでは、このページがまだ翻訳されていません。 このページの最新版は英語でご覧になれます。

グラフへのテキストの追加

テキスト オブジェクトとは

テキスト注釈は、入力したテキスト文字列を含むボックスです。このボックスは、境界と背景をもち、透明な場合もあります。このテキストは、インストールされたテキスト フォントが使用でき、TeX または LaTeX マークアップも含めることができます。MATLAB® の Figure 内の任意の位置に、ユーザーのデータを説明したり、データセット内の特定の点に注意を引くように、任意の型のテキスト注釈を挿入することができます。

次の例が示すように、グラフに手動で注釈を付けることは、プロット編集モードでは簡単です。プロット編集を有効にすると、[挿入] メニューから適切な種類の注釈を選択し、グラフ内または Figure の背景をクリックしてからテキストを入力することによって、テキスト注釈を作成できます。[テキスト矢印] 注釈を挿入するには、まず、矢印を末尾から先頭までドラッグ アウトしてから、末尾の隣にあるテキスト カーソルでテキストを入力します。

また、関数 text または gtext を使って、コマンド ラインからテキスト注釈を加えることができます。次の例は、text の使い方を示します。

プロット編集モードまたは gtext を使用して、グラフ内の希望する場所にテキスト注釈を簡単に配置できます。関数 text を使うと、座標がわかっている Axes 内の特定の点に、テキスト注釈を配置することができます。

    メモ:   関数 text または gtext のいずれかのコマンドを使用して作成したテキスト注釈は、Axes に固定されています。プロット編集モードで作成されたテキスト注釈は、そうではありません。座標軸を移動したり、サイズ変更したりすると、テキスト注釈を再配置する必要があります。

関数 text または gtext によるテキストの作成

関数 text を使ってテキスト注釈を作成するには、グラフが使用するのと同じ Units (pixelsnormalized など) で x 座標と y 座標を指定して、テキストと Axes 内でのテキストの位置を指定しなければなりません。

テキスト注釈をデータ空間の指定した点にマウスで配置する場合は、関数 gtext を使用します。

次の例では、ロトカ・ボルテラの捕食者と被食者モデルからの出力のグラフにテキスト注釈、タイトルおよび凡例を追加します。また、セル配列を使って、複数行のテキスト注釈を作成する方法を示します (次の節セル配列内のテキストも参照してください)。

% Define initial conditions
t0 = 0;
tfinal = 15;
y0 = [20 20]';
% Simulate the differential equation
tfinal = tfinal*(1+eps);
[t,y] = ode23('lotka',[t0 tfinal],y0);
% Plot the two curves, storing handles to them
% so their DisplayNames can be set
hlines = plot(t,y);
% Compose and display two multiline text
% annotations as cell arrays
str1(1) = {'Many Predators;'};
str1(2) = {'Prey Population'};
str1(3) = {'Will Decline'};
text(7,220,str1)
str2(1) = {'Few Predators;'};
str2(2) = {'Prey Population'};
str2(3) = {'Will Increase'};
text(5.5,125,str2)
% Set DisplayNames for the lines for use by the legend
set(hlines(1),'Displayname','Prey')
set(hlines(2),'Displayname','Predator')
% Center a legend at the top of the graph
legend('Location','north')
% Add a title with bold style
title('Lotka-Volterra Predator-Prey Population Model',... 
  'FontWeight','bold')

テキストをプロット上の適切な点と結び付けるには、2 つの注釈矢印を手動で描画します。まず、コマンド ウィンドウで

plotedit

のように入力するか、Figure ツール バーの Edit Plot アイコン をクリックします。(プロット編集モードを終了したい場合は、plotedit と再度入力するか、アイコンを再度クリックします)。

[挿入] メニューから [矢印] を選択します。ここで示すように、テキストの各ブロックからラインを示す点までの矢印を描画します。

テキスト注釈の位置の計算

グラフ内のテキスト注釈の位置の計算をすることもできます。次のコードは、グラフ上の 3 つのデータ点に注釈を挿入します。

t=0:pi/64:2*pi; 
plot(t,sin(t)); 
title('The Sine of 0 to 2\pi')
xlabel('t = 0 to 2\pi')
ylabel('sin(t)')

text(3*pi/4,sin(3*pi/4),...
     '\leftarrowsin(t) = .707',...
     'FontSize',16)

text(pi,sin(pi),'\leftarrowsin(t) = 0',...
     'FontSize',16)

text(5*pi/4,sin(5*pi/4),'sin(t) = -.707\rightarrow',... 
     'HorizontalAlignment','right',...
     'FontSize',16)

テキスト文字列 'sin(t) = -.707 \rightarrow'HorizontalAlignmentright に設定して、グラフの上の点 [5*pi/4,sin(5*pi/4)] の左側に配置します。テキスト注釈の配列に関する情報は、テキスト配置 を参照してください。

シンボルの定義-  テキスト文字列のシンボルの利用に関する情報は、数学記号、ギリシャ文字、TeX 文字 を参照してください。

テキスト オブジェクトを使って、任意の位置で Axes に注釈を加えることができます。Axes のデータ単位を使って、テキストを配置することができます。たとえば、"A" = 0.25、α = 0.005 で、"t" = 0 ~ 900 の値をもつ関数 y=Ae-αt をプロットするとします。

t = 0:900;
plot(t,0.25*exp(-0.005*t))
xlabel('Time \musec')
ylabel('Amplitude')
title('\itAe^\alpha^t')

t の値が 300 の点に注釈を加えるには、プロットしている関数を使用してテキストの座標を計算します。

text(300,.25*exp(-0.005*300),...
['\bullet\leftarrow\fontname{times}0.25{\ite}^{-0.005{\itt}}',...
' at {\itt} = 300'],'FontSize',14)

この構文は、テキストの Position プロパティを

x = 300、y = 0.25e-0.005 x 300 として定義します。

既定のテキスト配置では、この点は、テキストの Extent プロパティで定義された四角形を使用して、文字列の左側に、垂直方向の中央揃えで配置されます。この既定のテキスト配列の変更に関する情報は、次の節を参照してください。

テキスト配置

HorizontalAlignmentVerticalAlignment プロパティは、指定したxy、z 座標に関してテキスト文字の配列をコントロールします。以下の図では、各プロパティのオプションと、対応するテキスト配置を示しています。

既定の配列は、以下になります。

  • HorizontalAlignment = 'left'

  • VerticalAlignment = 'middle'

テキスト String は、指定された Position に正確には配置されません。たとえば、前の節では、テキストを使用して注釈を付けた点があるプロットを示しました。プロットを拡大すると、テキストの実際の位置を参照できます。

小さい点は、テキストの Position プロパティで指定されている点です。大きい方の点は、テキストの String プロパティで最初の文字として定義されている行頭文字です。

テキストの整列

プロット内の最小値と最大値に、これらの値の点に固定され、実際の値を表示するテキストを使用してラベルを付けるとします。この例では、プロットされたデータを使用して、グラフ上に表示するテキストの位置と値を特定します。peaks 行列からの一列が、プロットデータを生成します。

Z = peaks;
h = plot(Z(:,33));

最初の手順は、テキストを最大値と最小値の点に配置するために必要な座標を特定するため、最小値と最大値のインデックスを検出することです(get および find を使用)。次に、値と、その値がどのようなものであるかという説明を連結して、文字列を作成します。

x = get(h,'XData'); % Get the plotted data
y = get(h,'YData');
imin = find(min(y) == y); % Find the index of the min and max
imax = find(max(y) == y);
text(x(imin),y(imin),[' Minimum = ',num2str(y(imin))],...
	'VerticalAlignment','middle',...
	'HorizontalAlignment','left',...
	'FontSize',14)
text(x(imax),y(imax),['Maximum =  ',num2str(y(imax))],...
	'VerticalAlignment','bottom',...
	'HorizontalAlignment','right',...
	'FontSize',14)

関数 text は、配置プロパティの設定に従って、座標で指定された点に対して文字列を配置します。最小値については、テキスト配置点の右側に文字列が表示されます。最大値については、テキスト配置点の左上に文字列が表示されます。テキストは、視点にかかわらず、コンピューター スクリーン面に常に残ります。

テキスト オブジェクトの編集

グラフ内の任意のテキスト ラベルまたは注釈を編集することができます。

  1. プロット編集モードを開始します。

  2. 文字列をダブルクリックします。または文字列を右クリックしてコンテキスト メニューから [編集] を選択します。

    編集バー (|) がテキストの隣に表れます。

  3. テキストの変更を加えます。

  4. テキスト エディット ボックスの外側の任意の位置をクリックして、テキスト編集モードを終了します。

    メモ:   ギリシャ文字、数学記号のような特殊文字を作成するには、TeX 文字列を使用してください。利用可能な文字の表に関しては、テキストの string プロパティを参照してください。[フォント] ダイアログ ボックス (テキスト オブジェクトのコンテキスト メニューと、プロパティ エディターからアクセス可能) を使用し、[シンボル] フォント ファミリを選択して特殊文字を作成した場合は、MATLAB コマンドを使用してこのテキスト オブジェクトを編集することはできません。

数学記号、ギリシャ文字、TeX 文字

TeX 文字列を使用すると、テキストに数学記号やギリシャ文字を含めることができます。この節では、TeX 文字列の作成方法を説明します。

2 つのレベルでの MATLAB TeX サポート

テキストの Interpreter プロパティによって制御される TeX のサポートには 2 つのレベルがあります。

  • 'tex' — TeX マークアップを一部サポート

  • 'latex' — TeX および LaTeX のマークアップをサポート

文字が TeX マークアップとして解釈されないようにするには、interpreter プロパティを 'none' に設定します。

利用可能なシンボルとギリシャ文字

記号とそれらの定義に使用される文字列の一覧は、テキスト プロパティのリファレンス ページで「TeX 文字列の表」を参照してください。

一般的には、関数 text を使用して、文字シーケンスをテキスト オブジェクトの String プロパティに割り当てることによって、シンボルやギリシャ文字を含むテキストを定義できます。これらの文字列を関数 titlexlabelylabelzlabel の文字引数に含ませることができます。

グラフのタイトルに数式を使用

次の例では、TeX 文字列を使用して、グラフのラベルを作成します。次の構文は、タイトル、x 軸ラベル、y 軸ラベルを既存のグラフに付けます。

title('{\itAe}^{-\alpha\itt}sin\beta{\itt} \alpha<<\beta')
xlabel('Time \musec.')
ylabel('Amplitude')

すべての TeX 文字列の前にバックスラッシュ文字 (\) を付けます。タイトルを定義している文字列を調べると、これらの文字の使い方がわかります。

TeX 文字の解釈の制御

テキストの Interpreter プロパティによって、TeX 文字の解釈を制御します。このプロパティを none に設定すると、MATLAB は特殊文字を、その文字のとおり解釈します。

TeX 文字列のテキスト色の指定

後続の文字の色を元の色 (既定値は black) から変更するには、\color 修飾子を使用します。構文は、以下のようになります。

  • \color{colorname}: 8 つの基本色 (redgreenyellowmagentablueblackwhite) と、4 つの Simulink® 色 (graydarkGreenorangelightBlue) に使用します。

    色の省略名 (1 文字の略称) は、\color 修飾子ではサポートされていないことに注意してください。

  • \color[rgb]{r g b}: 0 ~ 1 の値の RGB の 3 要素をセル配列として指定します。

たとえば、次のようになります。

text(.1,.5,['\fontsize{16}black {\color{magenta}magenta '...
'\color[rgb]{0 .5 .5}teal \color{red}red} black again'])

添字と添字文字の指定

下付き文字 "_" と上付き文字 "^" は、直後の文字または中かっこ内に指定された部分文字列を添字に変更します。

Interpretertex に設定されている場合、TeX 文字列の定義に使用した特殊文字を表示するには、\\、\{、\}、\_、\^ のように、文字の前にバックスラッシュ文字 "\" を付けます。 \\, \{, \} \_, \^.

詳細は、関数 text のリファレンス ページを参照してください。

Interpreternone に設定されている場合、String 内の文字は解釈されず、テキストを描画するときにすべてが表示されます。

Interpreterlatex に設定されている場合、MATLAB ではテキスト オブジェクトで完全な LaTeX インタープリターが実行されます。詳細は、Interpreter プロパティを参照してください。

テキストで文字変数と数値変数を使用する

どの文字変数も、テキストの String プロパティの指定として有効です。この節では、行列、セル配列および数値変数を関数 text に対する引数として使用する方法について説明します。

文字配列内のテキスト

たとえば、行列 PersonalData の各行は、個人の特定の情報を含んでいます (各行が同じ列数になるように、最長の行以外に空白が挿入されることに注意してください)。

PersonalData = ['Jack Straw ';'489 Main St';'Wichita KS '];

データを表示するには、目的の行にインデックスを付けます。

text(.3,.5,['Name: ',PersonalData(1,:)])
text(.3,.45,['Address: ',PersonalData(2,:)])
text(.3,.4,['City and State: ',PersonalData(3,:)])

セル配列内のテキスト

セル配列を用いることで、一行のテキスト オブジェクトに複数行のテキストを作成することが可能になります。各セルの文字数を同じにする必要はありません。たとえば、次の構文

key(1)={'{\itAe}^{-\alpha\itt}sin\beta{\itt}'};
key(2)={'Time in \musec'};
key(3)={'Amplitude in volts'};
text(.1,.8,key)

は、以下を出力します。

数値変数

関数 num2str (数値を文字列にする) を使って、テキスト文字列内で数値変数を指定できます。たとえば、コマンド ラインに次のように入力します。

x = 21;
['Today is the ',num2str(x),'st day.']

これにより、3 つの別々な文字列を 1 つに連結します。

Today is the 21st day.

結果は有効な文字列であるため、それをテキストの String プロパティの値として指定できます。

text(xcoord,ycoord,['Today is the ',num2str(x),'st day.'])

複数行のテキスト

セル配列を使うと、複数行のテキスト文字列を入力することができます。これは、1 つの文字列変数を、セルごとに 1 つの行をもつ 1 つのセル配列として定義するだけで実行できます。この例では、2 つのセル配列を定義しています。1 つは uicontrol に使用するもので、もう 1 つは text に使用する場合を示します。

uistr(1) = {'Center each line in the Uicontrol'};
uistr(2) = {'Also check out the textwrap function'};
txstr(1) = {'Each cell is a quoted string'};
txstr(2) = {'You can specify how the string is aligned'};
txstr(3) = {'You can use LaTeX symbols like \pi \chi \Xi'};
txstr(4) = {'\bfOr use bold \rm\itor italic font\rm'};
txstr(5) = {'\fontname{courier}Or even change fonts'};
plot(0:6,sin(0:6))
uicontrol('Style','text','Position',[80 80 200 30],...
          'String',uistr);
text(5.75,sin(2.5),txstr,'HorizontalAlignment','right')

LaTeX で数式を整形する

LaTeX マークアップ言語は TeX から発達した言語であり、TeX の機能の上位集合をもちます。LaTeX を使用すると、数学記号の指定やスタイルをより詳細に制御できます。

以下の例では、関数 text を使用しながら、LaTeX の活字組み機能の一部について説明します。既定のインタープリターは TeX 用であるため、以下のスクリプトに含まれているような式を活字組みする場合は、パラメーターと値のペア 'interpreter','latex' を指定する必要があります。

%% LaTeX Examples--Some well known equations rendered in LaTeX
%
figure('color','white','units','inches','position',[2 2 4 6.5]);
axis off

%% A matrix; LaTeX code is
% \hbox {magic(3) is } \left( {\matrix{ 8 & 1 & 6 \cr 
% 3 & 5 & 7 \cr 4 & 9 & 2 } } \right)
h(1) = text('units','inch', 'position',[.2 5], ...
    'fontsize',14, 'interpreter','latex', 'string',...
    ['$$\hbox {magic(3) is } \left( {\matrix{ 8 & 1 & 6 \cr'...
    '3 & 5 & 7 \cr 4 & 9 & 2 } } \right)$$']);

%% A 2-D rotation transform; LaTeX code is
%  \left[ {\matrix{\cos(\phi) & -\sin(\phi) \cr
%  \sin(\phi) & \cos(\phi) \cr}}
%  \right] \left[ \matrix{x \cr y} \right]  
%  
%  $$ \left[ {\matrix{\cos(\phi) 
%  & -\sin(\phi) \cr \sin(\phi) & \cos(\phi)  % \cr}}
%  \right] \left[ \matrix{x \cr y} \right] $$ 
%
h(2) = text('units','inch', 'position',[.2 4], ...
    'fontsize',14, 'interpreter','latex', 'string',...
    ['$$\left[ {\matrix{\cos(\phi) & -\sin(\phi) \cr'...
    '\sin(\phi) & \cos(\phi) \cr}} \right]'...
    '\left[ \matrix{x \cr y} \right]$$']);

%% The Laplace transform; LaTeX code is
%  L\{f(t)\}  \equiv  F(s) = \int_0^\infty\!\!{e^{-st}f(t)dt}  
%  $$ L\{f(t)\} \equiv  F(s) = \int_0^\infty\!\!{e^{-st}f(t)dt} $$
%  The Initial Value Theorem for the Laplace transform:
%  \lim_{s \rightarrow \infty} sF(s) = \lim_{t \rightarrow 0} f(t)
%  $$ \lim_{s \rightarrow \infty} sF(s) = \lim_{t \rightarrow 0}
%  f(t) $$
%
h(3) = text('units','inch', 'position',[.2 3], ...
    'fontsize',14, 'interpreter','latex', 'string',...
    ['$$L\{f(t)\}  \equiv  F(s) = \int_0^\infty\!\!{e^{-st}'...
    'f(t)dt}$$']);

%% The definition of e; LaTeX code is
%  e = \sum_{k=0}^\infty {1 \over {k!} }
%  $$ e = \sum_{k=0}^\infty {1 \over {k!} } $$
%
h(4) = text('units','inch', 'position',[.2 2], ...
    'fontsize',14, 'interpreter','latex', 'string',...
    '$$e = \sum_{k=0}^\infty {1 \over {k!} } $$');

%% Differential equation
% The equation for motion of a falling body with air resistance
% LaTeX code is
%  m \ddot y = -m g + C_D \cdot {1 \over 2} \rho {\dot y}^2 \cdot A
%  $$ m \ddot y = -m g + C_D \cdot {1 \over 2} \rho {\dot y}^2
%  \cdot A  $$
%
h(5) = text('units','inch', 'position',[.2 1], ...
    'fontsize',14, 'interpreter','latex', 'string',...
    ['$$m \ddot y = -m g + C_D \cdot {1 \over 2}'...
    '\rho {\dot y}^2 \cdot A$$']); 

%% Integral Equation; LaTeX code is
%  \int_{0}^{\infty} x^2 e^{-x^2} dx = \frac{\sqrt{\pi}}{4}  
%  $$ \int_{0}^{\infty} x^2 e^{-x^2} dx = \frac{\sqrt{\pi}}{4} $$  
%  
h(6) = text('units','inch', 'position',[.2 0], ...
    'fontsize',14, 'interpreter','latex', 'string',...
    '$$\int_{0}^{\infty} x^2 e^{-x^2} dx = \frac{\sqrt{\pi}}{4}$$');   

LaTeX プロジェクトのウェブ サイト http://www.latex-project.org/ では、LaTeX システムの詳細を参照できます。

ボックスにテキストを描画する

関数 text を使用して文字列を表示する場合、文字列の位置はテキストの Extent と呼ばれる四角形によって定義されます。この四角形をボックスとして、あるいは塗りつぶした領域として表示できます。たとえば、等高線のラベルを強調表示して、テキストを読みやすくすることができます。

[x,y] = meshgrid(-1:.01:1);
z = x.*exp(-x.^2-y.^2);
[c,h]=contour(x,y,z);
h = clabel(c,h);
set(h,'BackgroundColor',[1 1 .6])

追加機能は、下記の Text プロパティを参照してください。

  • BackgroundColor — 四角形の内部の色です (既定値は 'none')。

  • EdgeColor — 四角形のエッジの色です (既定値は 'none')。

  • LineStyle — 四角形のエッジ ラインのスタイルです (まず EdgeColor を設定します)。

  • LineWidth — 四角形のエッジの線幅です (まず EdgeColor を設定します)。

  • Margin — テキスト範囲に余白を挿入することにより、四角形のサイズを拡大します。

この情報は役に立ちましたか?