2

コマンド(コマンドの出力を2つの行列に割り当てることができます)を使用してカウントと中点を手動で取得したplot後、データセットでコマンドを使用して、MATLABで「手動で」ヒストグラムを作成しています。hist私が本当にやりたいのは、ヒストグラムの各バーの上に、その列の中心点の値を示すラベルを追加することです。私はすでにこれらの中心値をすべて含むベクトルを持っているので、私の問題は、実際にラベルを作成して各バーの上に配置する方法を理解することにあります。これらを追加する際の助けをいただければ幸いです。

私がこれまでに試したこと:

別のStackOverflowの投稿に基づいて、これらの行に沿ってコマンドを見ました

for b = 1:nBins
    text(bins(b),counts(b)*2,num2str(a(b==binIdx,1)),'VerticalAlignment','top')
end

おそらくtextループ内でコマンドを使用して各バーの上にラベルを配置していると思いますが、text上記のコマンドを自分のデータに変更しようとすると、プロットにラベルが表示されませんでした。

4

1 に答える 1

10

確かに、で例を使用できますがtext、わずかに改善されています。

text(x, y, ' a string')グラフ上の点(x、y)の位置にテキスト文字列を配置します。あなたの例では、x-coordianteはOK(バーの中心)ですが、各y-coordianteは対応するバーの2倍の高さにあります。これにより、テキスト文字列がグラフの境界の外側に配置される場合があります。

最初に行うことをお勧めするのは、次の方法でy軸を設定して、新しいテキストラベル用のスペースを確保することです。

ylim([0, max(counts) * 1.2]);  %# The 1.2 factor is just an example

次に、質問のサンプルコードを次のように使用します。

A = fix(10 * rand(30, 1)) + 1; %# Randomize 30 samples between 1 and 10
[counts, bins] = hist(A);      %# Compute the histogram
figure, bar(bins, counts),     %# Plot the histogram bars
ylim([0, max(counts) * 1.2]);  %# Resize the y-axis

%# Add a text string above each bin
for i = 1:numel(bins)
    text(bins(i) - 0.2, counts(i) + 0.4, ['y = ', num2str(counts(i))], 'VerticalAlignment', 'top', 'FontSize', 8)
end

これはあなたが得るべきものです:

ヒストグラム

ここで、各ラベルは、対応するバーのy軸の0.4ティック上に、バーの中心(x軸)から-0.2ティックオフセットして配置されます。

また、各ラベルが各バーの幅にぴったり合うように、フォントサイズを8に減らしたことに注意してください。もちろん、のさまざまなプロパティtextを試して、ラベルを好みに合わせることができます。

于 2012-09-19T19:38:26.413 に答える