2009年1月16日金曜日

MATLABのグラフに目盛りを追加

MATLABでグラフを作るとき,自動でつく目盛り以外に特定の値の目盛りがほしい場合があります.真値のところに目盛りがほしいとか収束先のところに目盛りがほしいとかそんなときです.

じつはこれをプログラムからやるのは結構面倒だったりします.
なので専用の関数を作ってみました.

こんなグラフに
>> addxtick(2/pi)
とすると

こんな風に目盛りがつきます.
ラベルもいじりたいときは
>> addxtick(pi/2,'pi/2')
と入れれば

となります.便利ですよ.
短いプログラムなのでコピーしてaddxtick.mという名前で保存して使ってください.

function [] = addxtick( tk, tklbl )
%ADDXTICK --- Add new tick to x-axis
%   Ex.    addxtick(3.14)
%   Ex2.  addxtick(3.14, 'Pi')

if nargin==1
    set(gca,'XTick',unique(sort([get(gca,'XTick'), tk ] )));
else
    temp = cellstr(get(gca,'XTickLabel'));
    temp = {temp{:},tklbl};
    [temp2,idx] = sort([get(gca,'XTick'),tk]);
    [temp2,idx2]=unique(temp2);
    idx=idx(idx2);
    set(gca,'XTick',temp2);
    set(gca,'XTickLabel',temp(idx));   
end

end
あと,ほとんど同じですがaddytick.mも置いておきます.
function [] = addytick( tk, tklbl )
%ADDYTICK --- Add new tick to y-axis
%   Ex.    addytick(3.14)
%   Ex2.  addytick(3.14, 'Pi')

if nargin==1
    set(gca,'YTick',unique(sort([get(gca,'YTick'), tk ] )));
else
    temp = cellstr(get(gca,'YTickLabel'));
    temp = {temp{:},tklbl};
    [temp2,idx] = sort([get(gca,'YTick'),tk]);
    [temp2,idx2]=unique(temp2);
    idx=idx(idx2);
    set(gca,'YTick',temp2);
    set(gca,'YTickLabel',temp(idx));   
end

end

1 件のコメント:

くろろ さんのコメント...

uniqueを使ってるのと、
インデックスの並び替えがポイントですかねー

複数でも対応できるので便利ですな~