【问题标题】:Histogram height with Matplotlib and PythonMatplotlib 和 Python 的直方图高度
【发布时间】:2016-05-25 13:26:32
【问题描述】:

我正在尝试学习 Matplotlib 和使用 python 绘图,我正在尝试学习如何绘制直方图,但我不知道如何获得条形的高度。 假设我想要 1、2、3 和高度 10、20、30 的 3 个条形。我该怎么做?

np.hist((1,2,3))
np.hist(((1,10),(2,20),(3,30)))

这些都对吗? 当我输入第一个时,我得到了 x 值,但高度都是 1。请帮助

【问题讨论】:

  • 带有代码的 Matplotlib 示例可以在这里找到:matplotlib.org/gallery.html
  • 是的,我看过那里,但他们都使用随机生成器来创建高度,我如何输入自己的高度

标签: python matplotlib


【解决方案1】:

我猜您正在尝试使用 matplotlib.pyplot 并且您必须在第一次测试中使用了“hist”函数。

我将退后一步,确保您了解直方图是什么。当您绘制向量的直方图时,您绘制的是密度概率函数的估计值。如果将向量 (1, 2, 3) 作为“hist”的输入,则向量表示从随机变量中抽取的样本。通过使用这个向量作为输入,您告诉您已经绘制了三个点,一个具有值 1,另一个具有值 2,最后一个具有值 3,因此您得到了绘图。

答案可能是这样的:

import numpy as np
import matplotlib.pyplot as plt
a = np.concatenate([np.ones(10), 2*np.ones(20), 3*np.ones(30)])
plt.hist(a)

所以在这里,我用 10 个值为 1 的样本、20 个值为 2 的样本和 30 个值为 3 的样本创建了一个,然后我将它们放在一个向量中(通过连接)。

希望对你有所帮助。

【讨论】:

    【解决方案2】:

    我假设您的意思是 numpy.histogram() 函数,该函数旨在为您完成工作以获取实值数字的分布并从中生成频率区间。你给函数一个包含三个值的列表,所以这些值的频率都是 1——也就是说,在你传递的数组中有一个 1、一个 2 和一个 3 .

    制作一个简单的条形图可以更轻松地完成您所描述的内容。您知道您想要什么 x 值(1、2 和 3),并且您知道您想要每个 bin 的高度(10、20、30),那么为什么不直接执行以下操作呢?

    import matplotlib.pyplot as plt
    plt.bar([1, 2, 3], [10, 20, 30])
    

    如果您真的想生成具有这些频率计数的直方图,您可以通过在数组中重复 1 十次、2 二十次和 3 三十次来自己构建一个:

    import matplotlib.pyplot as plt
    import numpy as np
    data = [1] * 10 + [2] * 20 + [3] * 30
    heights, bins = np.histogram(data, bins=[1, 2, 3, 4])
    plt.bar(bins[0:3], heights)
    

    当然,您也可以跳过创建直方图箱和高度,直接使用matplotlib.pyplot.hist

    import matplotlib.pyplot as plt
    data = [1] * 10 + [2] * 20 + [3] * 30
    plt.hist(data, bins=[1, 2, 3, 4])
    

    【讨论】:

      猜你喜欢
      • 2014-04-15
      • 2017-05-19
      • 2019-07-07
      • 2017-05-04
      • 1970-01-01
      • 2021-02-19
      • 2011-09-06
      • 2016-12-18
      • 2017-06-29
      相关资源
      最近更新 更多