如何在Matlab中使用直方图处理程序

3

我试图将多个直方图输出积累到一个cell数组中,但似乎在单个直方图命令的第一次执行后,无法绘制或进行任何操作,因为它只是对已删除的直方图的句柄。

>> x = randn(10000,1);
>> h = histogram(x); 
>> h

h = 

  handle to deleted Histogram
>> whos h
  Name      Size            Bytes  Class                                        Attributes

  h         1x1               104  matlab.graphics.chart.primitive.Histogram              

我知道可以在计算直方图时将其写入文件,如何在Matlab中将直方图保存到文件?。但是我正在尝试将其累积到一个单元数组中以供后续分析。


1
我现在想我明白你的意思了 - 在图形关闭后,句柄被删除。 - buzjwa
我会说不要累积句柄,只需累积histcounts中的分组数据,并且只在需要时使用bar显示它们。对图表进行的任何更改都应该在这里完成。 - buzjwa
2个回答

3
这是由于histogramBeingDeleted属性可能是只读的,因此您无法更改它。
但是,您可以复制另一个结构中的属性以供以后使用。请按以下方式修改您的代码:
x = randn(10000,1);
h = histogram(x);
prop = properties(h);
for i = 1:length(prop)
    newh.(prop{i}) = h.(prop{i});
end

现在,h的所有属性都存储在newh中,即使您关闭直方图图形,这些属性也将保留在那里。

2

正如评论中所建议的那样,如果您只需要直方图的值,则正确的方法是使用histcounts:

x = randn(10000,1);
[N,edges] = histcounts(x);

这样,您可以收集所有的bin x和y值(分别是edgesN),并稍后使用bar绘制它们。下面是一个演示,比较了结果:

subplot 121
h = histogram(x)
title('histogram')
subplot 122
b = bar(edges(1:end-1),N,'FaceColor',lines(1),...
    'FaceAlpha',0.6)
title('bar')

bar vs hist

如果需要以与histogram完全相同的方式显示直方图,则可以设置更多bar属性。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接