隐藏直方图

时间:2016-11-17 05:34:41

标签: python matplotlib plot histogram

所以我想绘制一个正态分布,我已经看到一种方法是使用这个代码:

import numpy as np
import matplotlib.pyplot as plt

mu = 5
sigma = 1

s = np.random.normal(mu, sigma, 1000)

count, bins, ignored = plt.hist(s, 100, normed=True);
pdf = 1/(sigma * np.sqrt(2 * np.pi)) * np.exp(- (bins - mu)**2 / (2 * sigma**2))

mu_ = 10
sigma_ = 1
s = np.random.normal(mu_, sigma_, 1000)

count_, bins_, ignored_ = plt.hist(s, 100, normed=True);
pdf_ = 1/(sigma_ * np.sqrt(2 * np.pi)) * np.exp(- (bins_ - mu_)**2 / (2 * sigma_**2))

plt.plot(bins, pdf, linewidth=2, color='g')
plt.plot(bins_, pdf_, linewidth=2, color='r')

plt.show()

结果是:

enter image description here

我的问题是,我可以以某种方式隐藏直方图,所以只显示正态分布线吗?我知道还有另一种方法来绘制正态分布,但我更喜欢这种方式

感谢您的帮助!!!

2 个答案:

答案 0 :(得分:3)

获得苹果切片的一种可能方法当然是准备一个苹果派,然后从馅饼中挑选所有的苹果。更简单的方法肯定不是制作蛋糕。

因此,在图中没有直方图的明显方法不是首先绘制它。相反,使用numpy.histogram(无论是function called by plt.hist)计算直方图,并将其输出绘制到图中。

import numpy as np
import matplotlib.pyplot as plt

mu = 5
sigma = 1

s = np.random.normal(mu, sigma, 1000)

count, bins  = np.histogram(s, 100, normed=True)
pdf = 1/(sigma * np.sqrt(2 * np.pi)) * np.exp(- (bins - mu)**2 / (2 * sigma**2))

mu_ = 10
sigma_ = 1
s = np.random.normal(mu_, sigma_, 1000)

count_, bins_  = np.histogram(s, 100, normed=True)
pdf_ = 1/(sigma_ * np.sqrt(2 * np.pi)) * np.exp(- (bins_ - mu_)**2 / (2 * sigma_**2))

plt.plot(bins, pdf, linewidth=2, color='g')
plt.plot(bins_, pdf_, linewidth=2, color='r')

plt.show()

enter image description here

答案 1 :(得分:0)

尝试之前添加plt.clf()

plt.plot(bins, pdf, linewidth=2, color='g')
plt.plot(bins_, pdf_, linewidth=2, color='r')

这将清除直方图,同时仍允许您使用绘制的输出。如果您想要两个单独的数字,一个是直方图,另一个是直线,请添加plt.figure()代替plt.clf()