主に関数imagescを使用してヒートマップを描画し、 xticklabel_rotate を使用してxtickラベルを回転させます。( xticklabel_rotate についてはこちらをご覧ください)。通常はうまく機能します。しかし、今日、xticklabel_rotate (または xticklabel_rotate で使用される Matlabテキストハンドル)が原因と思われる問題に遭遇しました。
問題を説明するために、次のコードとコードから生成された結果を出力します (基本的に、正規分布のデータ マトリックスをランダムに生成し、imagesc を使用してデータのヒートマップを描画し、そのラベルを上に描画し、軸の右に移動し、次に xticklabels を回転させます):
function debug_xticklabelRotate(numX, numY, axisFontsize)
data = randn(numY, numX);
imagesc(data);
colormap(jet);
box on
set(gca, 'ticklength', [0,0]);
set(gca, 'xminortick', 'off', 'yminortick', 'off');
set(gca, 'XAxisLocation', 'top');
set(gca, 'YAxisLocation', 'right');
set(gca,'FontSize', axisFontsize);
axis image
set(gca, 'Xtick', 1 : numX);
htext = xticklabel_rotate([],90, [], 'fontsize', axisFontsize);
set(gca, 'YTick', 1 : numY);
end
問題 1 : 上記の関数を次のパラメータで呼び出しました。
debug_xticklabelRotate(40, 100, .5);
出力画像を以下に示します (ここではスペースを節約するために、画像を切り取り、上部の数行のみを表示しています)。
xticklabel_rotate を呼び出した結果、Figure ボックスの右側も yticklabels も描画されないというバグがあることに注意してください。
問題2:上記の関数をパラメータで呼び出すと
debug_xticklabelRotate(40, 200, .5); % only numY is changed from 100 to 200
出力画像を以下に示します (ここでもスペースを節約するために、画像を切り取り、上部の数行のみを表示しています)。
http://i55.tinypic.com/317grdd.png
numY=100 の呼び出しと比較すると、この図ではデータ イメージとラベルの両方が表示されています。ただし、ここで 2 つの問題に注意してください。まず、xticklabelのフォントサイズは yticklabel のフォントサイズ (axisFontsize) と同じではありません。第 2 に、xtick ラベルが列 (xtick) とうまく整列していません。いくつかのラベルは近くにあり、いくつかは遠くにあります。
関数 debug_xticklabelRotate で xticklable_rotate の関数呼び出しを削除すると、これらの問題はすべて解消されることに注意してください (ただし、xticklabel は回転されません)。
私の問題が上記で明確に述べられていることを願っています。問題を解決するための提案は高く評価されます。どうもありがとうございました。