matplotlib hist 函数参数密度不起作用

riv*_*iao 20 python matplotlib histogram

plt.histdensity说法不成立。

我尝试使用density函数中的参数plt.hist来标准化图中的股票收益,但它不起作用。

以下代码对我来说效果很好,并给出了我想要的概率密度函数。

import matplotlib
import numpy as np
import matplotlib.pyplot as plt

np.random.seed(19680801)

# example data
mu = 100  # mean of distribution
sigma = 15  # standard deviation of distribution
x = mu + sigma * np.random.randn(437)

num_bins = 50

plt.hist(x, num_bins, density=1)

plt.show()
Run Code Online (Sandbox Code Playgroud)

绘图显示密度

但当我用股票数据尝试时,它根本不起作用。结果给出了非标准化数据。我在我的数据数组中没有发现任何异常数据。

import numpy as np
import matplotlib.pyplot as plt
fig = plt.figure()
plt.hist(returns, 50,density = True)
plt.show()
# "returns" is a np array consisting of 360 days of stock returns
Run Code Online (Sandbox Code Playgroud)

密度不起作用

Eth*_*man 9

这是 Matplotlib 中的一个已知问题。

如错误报告中所述: pyplot.hist() 中的密度标志无法正常工作

当密度 = False 时,直方图将在 Y 轴上有计数。但当密度 = True 时,Y 轴并不意味着任何有用的东西。我认为更好的实现是将 PDF 绘制为密度 = True 时的直方图。

开发人员将此视为一项功能而不是错误,因为它保持了与 numpy 的兼容性。他们已经关闭了一些关于它的错误报告,因为它正在按预期工作。更令人困惑的是,matplotlib 网站上的示例似乎显示此功能与 y 轴一起被分配了有意义的值。

你想用 matplotlib 做的事情是合理的,但 matplotlib 不会让你这样做。