私はあなたが望むものを正確に行うべき関数を書いています。それはダウンX-ラベルを移動し、ラベルを表示するのに十分な大きさであることが図形の大きさを増加させる、まったく同じ大きさと位置で軸を保持:この場合offset
で
function moveLabel(ax,offset,hFig,hAxes)
% get figure position
posFig = get(hFig,'Position');
% get axes position in pixels
set(hAxes,'Units','pixels')
posAx = get(hAxes,'Position');
% get label position in pixels
if ax=='x'
set(get(hAxes,'XLabel'),'Units','pixels')
posLabel = get(get(hAxes,'XLabel'),'Position');
else
set(get(hAxes,'YLabel'),'Units','pixels')
posLabel = get(get(hAxes,'YLabel'),'Position');
end
% resize figure
if ax=='x'
posFigNew = posFig + [0 -offset 0 offset];
else
posFigNew = posFig + [-offset 0 offset 0];
end
set(hFig,'Position',posFigNew)
% move axes
if ax=='x'
set(hAxes,'Position',posAx+[0 offset 0 0])
else
set(hAxes,'Position',posAx+[offset 0 0 0])
end
% move label
if ax=='x'
set(get(hAxes,'XLabel'),'Position',posLabel+[0 -offset 0])
else
set(get(hAxes,'YLabel'),'Position',posLabel+[-offset 0 0])
end
% set units back to 'normalized' and 'data'
set(hAxes,'Units','normalized')
if ax=='x'
set(get(hAxes,'XLabel'),'Units','data')
else
set(get(hAxes,'YLabel'),'Units','data')
end
end
絶対にオフセットされなければなりませんピクセル。相対的なオフセットが必要な場合は、この関数を簡単に書き直すことができると思います。 hFig
は図形ハンドルで、hAxes
軸ハンドルです。
EDIT:図形をhFig = figure;
、軸をhAxes = axes;
(図のように軸を設定します:set(hAxes,...)
)を作成してから関数を呼び出してください。
EDIT2:'Units'
のhAxes
およびXLabel
がそれぞれ「正規化された」および「データ」に戻された行が追加されました。そうすることで、Figureはサイズ変更後の状態になります。
EDIT3:XラベルとYラベルの両方で機能するように修正されました。追加入力ax
は、'x'
または'y'
にする必要があります。
y軸に取り組む際には、大きな違いはありますか?その場合、プロットそのものを移動する必要があると思いますよね? – Niko
私はコードがかなり簡単にy軸上で動作するように変換されると思います。私は今バスに乗っているので今はできませんが、私は今夜後で見るでしょう(数時間以内) – ThijsW
何らかの理由で、この方法は失敗しました。 x軸上の50ピクセルのオフセット。私のセットアップでは、ラベルは半分にカットされます。しかし、いくつかのピクセルの望ましい範囲では、この機能は魅力のように機能するので、どうもありがとう! – Niko