【问题标题】:Matplotlib ValueErrorMatplotlib 值错误
【发布时间】:2020-05-07 15:55:56
【问题描述】:

我已经为这个问题苦苦挣扎了几个小时,代码如下:

    for i in range(int(user_input)):
        summ = randint(1,10)+randint(1,10)+randint(1,10)+randint(1,10)
        x.append(summ)   
    print(x) 
    counts = np.bincount(np.array(x))
    fig, ax = plt.subplots()
    ax.bar(range(41), counts, width=0.8, align='center')
    ax.set(xticks=range(1,41), xlim=[0, 41])
    plt.show()

我收到以下错误:我不知道为什么?

ValueError:形状不匹配:无法将对象广播到单个形状

日志指向这一行:

ax.bar(range(41), counts, width=0.8, align='center')

谢谢

编辑:@olenscki 的答案是有效的,但结果情节很混乱,正如您从图片中看到的那样,感谢您提供任何进一步的帮助:

编辑 2:正如@olenscki 的 cmets 所建议的,问题已解决。

【问题讨论】:

    标签: python numpy matplotlib histogram


    【解决方案1】:

    在你ax.bar 调用中,你给函数2 个参数:一个41 的范围和一个计数数组。 range(41) 并不总是具有相同的维度,范围总是有 41 个数字,但计数可能只有 20 或 60 个值。这将解决您的问题:

    ax.bar(range(len(counts)), counts, width=0.8, align='center')
    

    这样,您将限制范围与计数具有相同的维度

    【讨论】:

    • 谢谢你,它正在工作,虽然 x 轴刻度搞砸了,你知道我该如何解决吗?
    • 您可能会在更新后的问题编辑中看到结果
    • 我也注意到了,您只能删除 ax.set 行。 mpl 会自动为您设置刻度,尽管它不会逐个打印它。如果您希望它按值绘制值,您可以增加绘图长度来声明绘图尺寸,例如fig, ax = plt.subplots(figsize=(20, 10)),或者您可以为绘图提供自己的股票参数,这要复杂得多,但会产生更好的结果,您可以在此处了解股票格式化程序:matplotlib.org/3.1.1/gallery/ticks_and_spines/…
    猜你喜欢
    • 2014-08-01
    • 1970-01-01
    • 1970-01-01
    • 2022-09-23
    • 2018-04-25
    • 1970-01-01
    • 1970-01-01
    • 2022-12-11
    • 2018-12-12
    相关资源
    最近更新 更多