美文网首页
python matplotlib模块: hist(直方图)

python matplotlib模块: hist(直方图)

作者: _Mirage | 来源:发表于2020-07-16 02:37 被阅读0次
需要注意的是边缘数据存在导致结果看上去"不完整"的情况: image.png

最右边的数据看不清楚,但是确实存在,只是数据太小了。这时候我们使用log参数,让程序自动调整y轴的尺度:


image.png
image.png
这样在不同的尺度上所有的数据都可以很清晰的看到。

数据集

源码:

# coding=utf-8

from matplotlib import pyplot as plt
import pandas as pd

plt.style.use('fivethirtyeight')

'''
# 表示我们要分类的所有横轴上的数据(纵轴将是每个区间[任意指定]内横轴数据出现的数量)
ages = [18, 19, 21, 25, 26, 26, 30, 32, 38, 45, 55]
# hist方法可以创建直方图, 重要的参数有bins, edgecolor, log 等
# bins可以是一个整数(将所有数据平均分成这个整数这么多段[所有区间]); 也可以是一个可迭代对象, hist会根据给定的对象来划分区间.
# edgecolor可以指定每个区间之间分割线的颜色, 如果制定了edgecolor会很清晰的分辨出各个区间.
# log是当你的数据集"差异"较大时,也就是说有个别"突出"数据远离平均数据,这样最后的结果很可能会"看不清"这些边缘数据,\
#   这时使用log=True可以很好的解决,hist会自动帮你选定划分数据的尺度,以让所有数据都清晰的在图里显示出来.
plt.hist(ages, bins=5, edgecolor='#444444')
'''

# 人为的指定区间, 区间数量是len(slices)-1
slices = [10, 20, 30, 40, 50, 60, 70, 80, 90, 100]
# 从数据集csv文件中读取数据
data = pd.read_csv('./data_3.csv')
# 取出csv文件所有列名为Age的值并返回一个可迭代对象
data_ages = data['Age']
# 绘制直方图,分割区间人为指定, 边缘颜色黑色, hist自动选定竖轴尺度
plt.hist(data_ages, bins=slices, edgecolor='#444444', log=True)
# 求出数据集年龄的平均值
median_age = data_ages.median()
# 绘制vertical(竖直)分割线以表示平均值, 颜色是红色, 标签是Age Median, 线宽设置为2
plt.axvline(median_age, color='#fc4f30', label='Age Median', linewidth=2)
# 必须要有legend标签才会绘制出去
plt.legend()

# 求出直方图在竖轴上最大值和最小值
y_min, y_max = plt.ylim()
# 在平均线靠右边一点绘制平均值的文本, 前两个参数是位置, 最后一个参数是待绘制的文本
plt.text(median_age * 1.05, y_max * 0.7,
         'Mean: {:.1f}'.format(median_age), color='#fc4f30')

plt.title('First histograms')
plt.xlabel('ages')
plt.ylabel('number of a specific range')
plt.tight_layout()
plt.show()

运行结果: image.png
image.png

相关文章

网友评论

      本文标题:python matplotlib模块: hist(直方图)

      本文链接:https://www.haomeiwen.com/subject/gwhehktx.html