如何为直方图设置最大值[重复]

Posted

技术标签:

【中文标题】如何为直方图设置最大值[重复]【英文标题】:How to set a max value for histogram [duplicate] 【发布时间】:2015-01-23 15:48:06 【问题描述】:

图片优先:

如您所见,我有一组正态分布。出于演示目的,有反馈说这些图应该“标准化”,因为我理解将绘图值设置为某个最大值并且绘图的曲率设置为适合这个无论如何。目标是让这些图更容易在视觉上进行比较——我希望这是有道理的。我在这个情节中使用histfit

您知道一些方法,我怎样才能使这些图表更具可比性?

编辑: 由于它被标记为重复,事实并非如此。我并不是真的在寻找适合直方图的概率密度,我想为每个概率密度曲线设置一个最大值。我知道市场主题,只是找不到我的答案。

编辑2:

这些是我的代码的摘录以及他们产生的解决方案:

[f1,x1] = hist(data1);
[f2,x2] = hist(data2);
[f3,x3] = hist(data3);

avg = mean(data1);
stdev = std(data1);
VERT1 = sort(data1);
y1 = exp(- 0.5 * ((VERT1 - avg) / stdev) .^ 2) / (stdev * sqrt(2 * pi));
y11 = y1/max(data1);


avg = mean(data2);
stdev = std(data2);
VERT2 = sort(data2);
y2 = exp(- 0.5 * ((VERT2 - avg) / stdev) .^ 2) / (stdev * sqrt(2 * pi));
y22 = y2/max(data2);

% 
avg = mean(data3);
stdev = std(data3);
VERT3 = sort(data3);
y3 = exp(- 0.5 * ((VERT3 - avg) / stdev) .^ 2) / (stdev * sqrt(2 * pi));
y33 = y3/max(data3);

为清楚起见直接链接:http://i.imgur.com/YPrcM3R.jpg

来自this explanation 我明白了:

[f1,x1] = hist(data1);
[f2,x2] = hist(data2);
[f3,x3] = hist(data3);


avg = mean(data1);
stdev = std(data1);
VERT1 = sort(data1);
y1 = exp(- 0.5 * ((VERT1 - avg) / stdev) .^ 2) / (stdev * sqrt(2 * pi));



avg = mean(data2);
stdev = std(data2);
VERT2 = sort(data2);
y2 = exp(- 0.5 * ((VERT2 - avg) / stdev) .^ 2) / (stdev * sqrt(2 * pi));



avg = mean(data3);
stdev = std(data3);
VERT3 = sort(data3);
y3 = exp(- 0.5 * ((VERT3 - avg) / stdev) .^ 2) / (stdev * sqrt(2 * pi));


h1 = bar(x1,f1/trapz(x1,f1));hold on;
h2 = bar(x2,f2/trapz(x2,f2),'r');hold on;
h3 = bar(x3,f3/trapz(x3,f3),'g');hold on;
plot(VERT1,y1,'b-');hold on;
plot(VERT2,y2,'r-');hold on;
plot(VERT3,y3,'g-');hold off;

结果为:

希望这能解释一切。

【问题讨论】:

您可以将每个直方图除以其最大值... 为什么不能缩放它们? normalisation of audio signal and reverting to original matlab 可能会给你一些提示。 要规范化直方图(或 pdf),以确保其 面积 为 1。例如,请参阅 here @KrystianMeresiński:也许你应该向我们展示你想要的东西,而不是让我们猜测和失败......在绘制你正在寻找的曲线之前/之后写一点怎么样? 你可能没有意识到,但这确实是that other question的复制品;同样的答案也适用于此。正如@LuisMendo 上面写的那样,所有概率密度曲线的面积都应该等于 1。你应该听从给你的明智建议。不要开始弄乱分布的宽度或平均值以使它们“看起来更好”。 【参考方案1】:

您所拥有的是两个具有非零均值和非单位标准差的图。这样的分布很难比较。在这种情况下(据我所知)归一化意味着使拟合的钟形曲线的平均值为 0 和标准差为 1。这可以很简单地实现。这是一个玩具示例:

clf;
data1 = random('normal',300,30,100,1); %Randomly generated first dataset
data2 = random('normal',250,10,100,1); %Randomly generated second dataset
h1=histfit(data1); %Plot the data
hold on;
h2=histfit(data2);
delete(h1(1));
delete(h2(1));
set(h2(2),'color','b')

这会产生:

要规范化,只需将您正在拟合的 data 替换为规范化数据:

h1=histfit( (data1-mean(data1)) / std(data1) );
h2=histfit( (data2-mean(data2)) / std(data2) );

屈服:

使图表的比较更加清晰。

【讨论】:

我得到了这个结果:imgur.com/ZYYtknp - 这更清楚了,所以谢谢。不过,这不是我想要的规范化。 所以你已经删除了分布的均值和方差...结果的含义是什么?!大部分信息都不见了! @Jean-FrançoisCorbett,这可能有用的原因有很多。假设我有一个预感是高斯但不知道的过程。通过将其置于标准范式中,我可以更好地以图形方式确定这一点(当然,正确的方法是通过 QQ 图)。在我看来,像峰度和偏度这样的东西在这种格式中更容易以图形方式看到。假设我有一天消耗的可乐瓶和健怡可乐瓶数量的数据,如果我将两者都标准化,我可能会更好地评估平均值附近的趋势。

以上是关于如何为直方图设置最大值[重复]的主要内容,如果未能解决你的问题,请参考以下文章

希望在直方图上编辑 X 轴以显示 R 中的大值 [重复]

怎样用excel画直方图的频率曲线

如何为多个组绘制带有注释的堆叠条

如何为python中的一系列图创建标准颜色条

如何为关联规则数据创建项目频率图?通过转换为数据框或数字?

频率分布直方图