微信扫一扫打赏支持

matplotlib库疑难问题---10、画直方图

matplotlib库疑难问题---10、画直方图

一、总结

一句话总结:

plt.hist(data, bins=5):data表示画直方图的数据,比如data=[1,4,3,2,4,1,4,6,3,2,1,4,6],bins用于指定直方图中条条的条数
import matplotlib.pyplot as plt
a=[1,4,3,2,4,1,4,6,3,2,1,4,6]
plt.hist(a, bins=5, color='g', alpha=0.75)  # hist:绘制直方图
plt.grid()
plt.show()

 

 

二、画直方图

博客对应课程的视频位置:10、画直方图-范仁义-读书编程笔记
https://www.fanrenyi.com/video/43/393

 

一、plt.hist()画直方图

用于画直方图。

参数列表:

plt.hist(x, bins=None, range=None, density=None, weights=None, cumulative=False, bottom=None, histtype='bar', align='mid', orientation='vertical', rwidth=None, log=False, color=None, label=None, stacked=False, normed=None)

x:指定要绘制直方图的数据;输入值,这需要一个数组或者一个序列,不需要长度相同的数组。
bins:指定直方图条形的个数;
range:指定直方图数据的上下界,默认包含绘图数据的最大值和最小值;
density:布尔,可选。如果"True",返回元组的第一个元素将会将计数标准化以形成一个概率密度,也就是说,直方图下的面积(或积分)总和为1。这是通过将计数除以数字的数量来实现的观察乘以箱子的宽度而不是除以总数数量的观察。如果叠加也是“真实”的,那么柱状图被规范化为1。(替代normed)
weights:该参数可为每一个数据点设置权重;
cumulative:是否需要计算累计频数或频率;
bottom:可以为直方图的每个条形添加基准线,默认为0;
histtype:指定直方图的类型,默认为bar,除此还有’barstacked’, ‘step’, ‘stepfilled’;
align:设置条形边界值的对其方式,默认为mid,除此还有’left’和’right’;
orientation:设置直方图的摆放方向,默认为垂直方向;
rwidth:设置直方图条形宽度的百分比;
log:是否需要对绘图数据进行log变换;
color:设置直方图的填充色;
label:设置直方图的标签,可通过legend展示其图例;
stacked:当有多个数据时,是否需要将直方图呈堆叠摆放,默认水平摆放;
normed:是否将直方图的频数转换成频率;(弃用,被density替代)
alpha:透明度,浮点数。

返回值:

n:直方图的值
bins:返回各个bin的区间范围
patches:返回每个bin的信息

1、最简单的直方图

In [1]:
import matplotlib.pyplot as plt
a=[1,4,3,2,4,1,4,6,3,2,1,4,6]
plt.hist(a, bins=5, color='g', alpha=0.75)  # hist:绘制直方图
plt.grid()
plt.show()
# 也就是1-2之间有几个数,2-3之间有几个数等

4、稍微复杂一点的直方图

In [5]:
import numpy as np
import matplotlib.pyplot as plt

mu1, sigma1 = 100, 15
mu2, sigma2 = 80, 10
x1 =  np.random.normal(mu1,sigma1,10000) # (均值,标准差,个数)
x2 =  np.random.normal(mu2,sigma2,10000) 

print(len(x1))
print(len(x2))

# the histogram of the data
# 50:将数据分成50组
# color:颜色;
# alpha:透明度
# density:是密度而不是具体数值
n1, bins1, patches1 = plt.hist(x1, bins=50,  density=True, color='g', alpha=1)
n2, bins2, patches2 = plt.hist(x2, bins=50,  density=True, color='r', alpha=0.2)

plt.show()
10000
10000

3、plt.hist返回值

In [10]:
import matplotlib.pyplot as plt
a=[1,4,3,2,4,1,4,6,3,2,1,4,6]
n1, bins1, patches1=plt.hist(a, bins=5, color='g', alpha=0.75)  # hist:绘制直方图
print(n1)
print(bins1)
print(bins1[:-1])
print(patches1)
for i in patches1:
    print(i)
plt.plot(bins1[:-1],n1,'--')
plt.grid()
plt.show()
[3. 2. 2. 4. 2.]
[1. 2. 3. 4. 5. 6.]
[1. 2. 3. 4. 5.]
<a list of 5 Patch objects>
Rectangle(xy=(1, 0), width=1, height=3, angle=0)
Rectangle(xy=(2, 0), width=1, height=2, angle=0)
Rectangle(xy=(3, 0), width=1, height=2, angle=0)
Rectangle(xy=(4, 0), width=1, height=4, angle=0)
Rectangle(xy=(5, 0), width=1, height=2, angle=0)

二、添加分布曲线

根据plt.hist()返回值,很容易画出分布曲线

In [7]:
import numpy as np
import matplotlib.pyplot as plt

np.random.seed(192)

mu1, sigma1 = 100, 15
mu2, sigma2 = 80, 10
x1 =  np.random.normal(mu1,sigma1,10000) # (均值,标准差,个数)
x2 =  np.random.normal(mu2,sigma2,10000) 

# the histogram of the data
# 50:将数据分成50组
# color:颜色;
# alpha:透明度
# density:是密度而不是具体数值
n1, bins1, patches1 = plt.hist(x1, bins=50,  density=True, color='g', alpha=1)
n2, bins2, patches2 = plt.hist(x2, bins=50,  density=True, color='r', alpha=0.2)


#print(len(bins1)) #51
#print(len(n1))  #50
plt.plot(bins1[:-1],n1,'--')
plt.plot(bins2[:-1],n2,'--')

plt.show()

三、多类型直方图

In [11]:
import numpy as np
import matplotlib.pyplot as plt

# 生成3组值,每组的个数可以不一样
x1=np.random.randn(10000)
x2=np.random.randn(5000)
x3=np.random.randn(2000)
print(len(x1))
print(len(x2))
print(len(x3))

plt.figure(figsize=(8,5))

plt.hist([x1, x2, x3], bins=10)

# 通过 ax.legend 函数来添加图例
plt.legend(['a','b','c'])

plt.show()
10000
5000
2000
In [ ]:
 

本系列博客对应课程位置:
1、解决中文乱码问题-范仁义-读书编程笔记
https://www.fanrenyi.com/video/43/371
2、将曲线平滑-范仁义-读书编程笔记
https://www.fanrenyi.com/video/43/372
3、matplotlib绘图核心原理-范仁义-读书编程笔记
https://www.fanrenyi.com/video/43/373
4、画动态图-范仁义-读书编程笔记
https://www.fanrenyi.com/video/43/374
5、保存动态图-范仁义-读书编程笔记
https://www.fanrenyi.com/video/43/375
6、显示图片-范仁义-读书编程笔记
https://www.fanrenyi.com/video/43/376

7、去掉刻度和边框-范仁义-读书编程笔记
https://www.fanrenyi.com/video/43/383

8、几个点画曲线-范仁义-读书编程笔记
https://www.fanrenyi.com/video/43/384

9、画箭头(综合实例)-1-范仁义-读书编程笔记
https://www.fanrenyi.com/video/43/391

9、画箭头(综合实例)-2-范仁义-读书编程笔记
https://www.fanrenyi.com/video/43/392

10、画直方图-范仁义-读书编程笔记
https://www.fanrenyi.com/video/43/393

11、画动态直方图-范仁义-读书编程笔记
https://www.fanrenyi.com/video/43/394

posted @ 2020-11-13 19:50  范仁义  阅读(406)  评论(0编辑  收藏  举报