【问题标题】:how do i bar plot a complete x axis and not just the last value我如何绘制完整的 x 轴而不仅仅是最后一个值
【发布时间】:2016-03-24 11:21:09
【问题描述】:

我正在绘制作为二项式试验成功函数的概率的条形图。我在我的图中得到了预期的 Y 值,但只有最后一个 x 值,它应该从 0 到 10。 这是我的代码:

close all; clc;

p = 0.2;
figure;

for j = 1:500

    for i = 1:10
        a = rand();
        success = fix(a*10);
        y = nchoosek(10,success)*(p^success)*(1-p)^(10-success);
        bar(success,y);
        hold on;
    end

end

【问题讨论】:

  • 您正在循环中调用bar。我建议将结果收集在一个数组中,然后只调用一次 bar 并获取所有结果。
  • 但是您正在绘制 5000 个小条。每个酒吧应该有什么?每个特定success 上的y 总值中的sum

标签: matlab bar-chart


【解决方案1】:

有几件事一半是错误的,有些是完全错误的。

最大的错误是:您每次迭代都绘制一个条形图。您的代码最终得到 50000 个条形图,一个在另一个之上。您的代码也可以真正矢量化。

p = 0.2;
figure;

% create lots of random numbers
a = rand(10000,1);
success = fix(a*10);

% nchoosek doesnt allow vectors , so lets loop
for ii=1:length(success)
    nch=nchoosek(10,success(ii));
end
% compute y
y = nch.*(p.^success).*(1-p).^(10-success);

现在,您有很多 y 用于 10 个不同的 success 值。我的猜测是,您想将与相同 success 值对应的所有值相加。为此,accumarray 函数是在 MATLAB 中创建的。

ybar=accumarray(success+1,y);
% plot ybar for the unique values of success!
bar(unique(success),ybar);

结果

【讨论】:

  • 我明白你在说什么,但是因为 P=0.2,当success=2 时,人们会期望得到最高的结果。
  • @Maguzi 理论上我完全不知道你在做什么,我只是修复了你的代码。您的y 方程可能有错误
  • @Maguzi 在你的y 等式中-> nchosek 将给出更大的价值,更小的success 是。等式的其余部分将给出较小的值success。这意味着较大的值总是当success 较小时
猜你喜欢
  • 1970-01-01
  • 2016-08-15
  • 1970-01-01
  • 1970-01-01
  • 2015-04-02
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多