【问题标题】:How can I make a histogram using Python just like using R hist function如何使用 Python 制作直方图,就像使用 R hist 函数一样
【发布时间】:2020-01-05 16:39:36
【问题描述】:

我正在尝试在 Python 中制作直方图,就像在 R 中一样。我该怎么做?

R:

age <- c(43, 23, 56, 34, 38, 37, 41)
hist(age)

Python:

age = (43, 23, 56, 34, 38, 37, 41)
plt.hist(age)

【问题讨论】:

  • 每个绘图系统都会产生不同的输出,如果您希望输出与 R 完全一样,那么我建议您坚持使用 R... 否则,如果您可以更具体地了解 matplotlib 输出的哪些方面您不需要就像你可能有机会得到答案
  • 优秀的方法 + 优秀的 Q。对如何用一种语言执行某事有深刻的理解将有助于学习如何用另一种语言执行它。

标签: python r matplotlib


【解决方案1】:

这里的区别是由R和matplotlib默认选择bin数的方式造成的。

对于这个特定的示例,您可以使用:

age = (43, 23, 56, 34, 38, 37, 41)
plt.hist(age, bins=4)

复制R-style histogram

一般情况

如果我们想让 matplotlib 的直方图看起来像 R 的一般,我们需要做的就是复制 R 使用的分箱逻辑。在内部,R 使用Sturges' Formula* 来计算 bin 的数量。 matplotlib 支持 out of the box,我们只需要为 bins 参数传递 'sturges'。

age = (43, 23, 56, 34, 38, 37, 41)
plt.hist(age, bins='sturges')

* 内部有点复杂,但这让我们大部分时间都到达了那里。

【讨论】:

    【解决方案2】:

    简而言之,在plt.hist 调用中使用bins="sturges"


    来自numpy.histogram_bin_edges

    bins:
    [...]
    ‘sturges’ R 的默认方法,只考虑数据大小。仅适用于高斯数据和 低估了大型非高斯数据集的 bin 数量。

    所以你会得到一个类似于R的直方图

    import matplotlib.pyplot as plt
    import numpy as np
    
    age = np.array((43, 23, 56, 34, 38, 37, 41))
    
    plt.hist(age, bins="sturges", facecolor="none", edgecolor="k")
    
    plt.show()
    

    但是请注意,边缘仍然是数据的最小值和最大值。无法自动更改此设置,但您可以通过 bins=(20,30,40,50,60) 手动将垃圾箱与 R 图中的垃圾箱完全相同。

    【讨论】:

      猜你喜欢
      • 2022-01-10
      • 2017-06-08
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-04-13
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多