我正在创建一个直方图"手动"在使用plot
命令(我可以将命令的输出分配给两个基质)之后,在数据集上使用hist
命令在MATLAB中手动获取计数和中点。我真正喜欢做的是在我的直方图上的每个条形图上方添加一个标签,说明该列的中心点值。
由于我已经有一个包含所有这些中心值的向量,我的问题在于弄清楚如何实际创建标签并将它们放在每个条形图上方。任何帮助添加这些将非常感谢!
我迄今为止所做的事情:
根据另一篇StackOverflow帖子,我看到了沿着这些行的命令
for b = 1:nBins
text(bins(b),counts(b)*2,num2str(a(b==binIdx,1)),'VerticalAlignment','top')
end
我认为我可能在循环中使用text
命令在每个条形图上方放置一个标签,但是当我尝试将上面的text
命令修改为我拥有的数据时,我在我的情节上看不到标签。
答案 0 :(得分:10)
您确实可以将该示例与text
一起使用,但略有改进。
text(x, y, ' a string')
将文本字符串放在图表上的点(x,y)的位置。在您的示例中,x-coordiantes是正常的(条形的中心),但每个y-coordiante的高度是相应条形的两倍。这可能会使文本字符串位于图形的边界之外。
我建议您首先按以下方式设置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个刻度处,距离条形中心偏移-0.2刻度(x轴)。
请注意,我还将字体大小减小到8,这样每个标签都能很好地适应每个条形的宽度。
当然,您可以使用text
的不同属性来根据自己的喜好调整标签。