2

主に関数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 は回転されません)。

私の問題が上記で明確に述べられていることを願っています。問題を解決するための提案は高く評価されます。どうもありがとうございました。

4

2 に答える 2

1

の作者としてxticklabel_rotate、私は言及されたエラーを再現しようとしましたが、ほんのわずかな成功でした。yラベルが右側にあるときに軸の位置が変更されるという問題を発見しました。これを調べます。同じ例を実行したときに示したような顕著なずれは発生しないため、どのように対応すればよいかわかりません。図を印刷するときにこれらの問題が存在することを確認してください。これは単純な表示の問題ではありません。

テキストボックスは、データ単位の目盛りの位置に作成されます。それらは真ん中の位置にあり、できることはそれほど多くありませんが、私は提案を受け入れています。

PS。この関数がMatLabに固有のものであるとよいと思います。もしそうなら、私はこれに取り組む必要はなかっただろう。

于 2011-03-31T17:36:14.883 に答える
0

行をコメントアウトした場合:

set(gca, 'YAxisLocation', 'right')

その後、期待どおりに動作するはずです。XTICKLABEL_ROTATE 関数は右の y ラベルをサポートしていないようです。元の作成者に連絡して、バグの可能性を知らせてください...

于 2011-01-21T22:00:04.457 に答える