【问题标题】:How can I add labels (of values) to the top of my MATLAB plot?如何将标签(值)添加到我的 MATLAB 图的顶部?
【发布时间】:2012-09-12 03:48:31
【问题描述】:

在使用hist 命令(我可以将命令的输出分配给两个矩阵)手动获取计数和中点。我真正想做的是在直方图的每个条形上方添加一个标签,说明该列的中心点值。 由于我已经有一个包含所有这些中心值的向量,我的问题在于弄清楚如何实际创建标签并将它们放置在每个条形上方。在添加这些方面的任何帮助将不胜感激!

到目前为止我所做的尝试:

根据另一个 StackOverflow 帖子,我看到了一个类似这些行的命令

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

我知道我可能在循环中使用text 命令在每个条形上方放置一个标签,但是当我尝试将上面的text 命令修改为我拥有的数据时,我看不到我的情节上的标签。

【问题讨论】:

    标签: matlab plot


    【解决方案1】:

    您确实可以将示例与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 的不同属性来根据自己的喜好调整标签。

    【讨论】:

    • 抱歉,我花了一段时间才回来尝试,但效果很好!谢谢!
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-12-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多