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 坐标是可以的(条的中心),但每个 y 坐标的高度是相应条的两倍。这可能会使文本字符串放置在图形边界之外。

我建议您首先做的是按以下方式设置 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 回答