栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Python

【Python学习】matplotlib学习总结——直方图

Python 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

【Python学习】matplotlib学习总结——直方图

  • 绘制直方图

举个例子:

  • 任务:绘制150部电影时长统计直方图。

    • 1、150部电影一位数据为:y = [131,98,125,131,124,139,131,117,128,108,135,138,131,102,107,114,119,128,121,142,127,130,124,101,110,116,117,110,128,128,115,99,136,126,134,95,138,117,111,78,132,124,113,150,110,117,86,95,144,105,126,130,126,130,126,116,123,106,112,138,123,86,101,99,136,123,117,119,105,137,123,128,125,104,109,134,125,127,105,120,107,129,116,108,132,103,136,118,102,120,114,105,115,132,145,119,121,112,139,125,138,109,132,134,156,106,117,127,144,139,139,119,140,83,110,102,123,107,143,115,136,118,139,123,112,118,139,123,112,118,125,109,132,134,112,114,122,109,106,123,116,131,127,115,118,112,135,133,101,131]
    • 2、y轴为次数
    • 3、设置图片大小和分辨率
    • 4、设置组数
    • 4、设置栅格
    • 6、绘制网格
    • 7、保存图片
  • 直方图:

    plt.hist(x, bins=None,.....)
    
    • x:一维数据
    • bins:为组数
  • 把数据分为多少组进行统计呢?

    • 组数要适当,太小会有较大的统计误差,太大会表现的规律不明显
    • 组数:当数据在100个以内时,常分为5-12组
    • 组距:bin_width,根据数据最大值以及最小值之差进行判断,最终组数需要为整数最佳(也就是组距bin_width 选取整除即可)

 组数=  max ⁡ ( x ) − min ⁡ ( x ) b i n _ w i d t h {text{ 组数= }}frac{{max (x) - min (x)}}{{bin_width}}  组数= bin_widthmax(x)−min(x)​

from matplotlib import pyplot as plt
import matplotlib

# 设置中文
matplotlib.rc('font',family='SimSun')

# 150部电影的时长
y = [131,98,125,131,124,139,131,117,128,108,135,138,131,102,107,114,119,128,121,142,127,130,124,101,110,116,117,110,128,128,115,99,136,126,134,95,138,117,111,78,132,124,113,150,110,117,86,95,144,105,126,130,126,130,126,116,123,106,112,138,123,86,101,99,136,123,117,119,105,137,123,128,125,104,109,134,125,127,105,120,107,129,116,108,132,103,136,118,102,120,114,105,115,132,145,119,121,112,139,125,138,109,132,134,156,106,117,127,144,139,139,119,140,83,110,102,123,107,143,115,136,118,139,123,112,118,139,123,112,118,125,109,132,134,112,114,122,109,106,123,116,131,127,115,118,112,135,133,101,131]

# 设置组数
d = 6 # 组距
num_bins = ( max(y) - min(y) ) // d

# 设置图表大小
plt.figure(figsize=(10,5),dpi=80)

# 设置x轴刻度
plt.xticks(range(min(y),max(y)+d,d)) #max(y)+d 的目的是可以使得max(y)最终能取得到

# 绘制直方图,第一个参数是总的数据,第二个参数是组数
plt.hist(y,num_bins)

# 绘制栅格
plt.grid(alpha=0.3)

# 设置x轴label
plt.xlabel("电影的时长 单位:min")

# 设置y轴label
plt.ylabel("次数")

# 设置标题title
plt.title("150部电影的直方统计图")

# 保存直方图
plt.savefig("./1.svg")

# 显示直方图
plt.show()

  • 我们现在的图横坐标是电影的时间,而纵轴是次数,如果想要把纵轴变为频率应该如何设置呢?
    • 只需要修改plt.hist()中添加density=True即可
  • 代码如下:
from matplotlib import pyplot as plt
import matplotlib

# 设置中文
matplotlib.rc('font',family='SimSun')

# 150部电影的时长
y = [131,98,125,131,124,139,131,117,128,108,135,138,131,102,107,114,119,128,121,142,127,130,124,101,110,116,117,110,128,128,115,99,136,126,134,95,138,117,111,78,132,124,113,150,110,117,86,95,144,105,126,130,126,130,126,116,123,106,112,138,123,86,101,99,136,123,117,119,105,137,123,128,125,104,109,134,125,127,105,120,107,129,116,108,132,103,136,118,102,120,114,105,115,132,145,119,121,112,139,125,138,109,132,134,156,106,117,127,144,139,139,119,140,83,110,102,123,107,143,115,136,118,139,123,112,118,139,123,112,118,125,109,132,134,112,114,122,109,106,123,116,131,127,115,118,112,135,133,101,131]

# 设置组数
d = 6 # 组距
num_bins = ( max(y) - min(y) ) // d

# 设置图表大小
plt.figure(figsize=(10,5),dpi=80)

# 设置x轴刻度
plt.xticks(range(min(y),max(y)+d,d)) #max(y)+d 的目的是可以使得max(y)最终能取得到

# 绘制直方图,第一个参数是总的数据,第二个参数是组数
plt.hist(y,num_bins,density=True)

# 绘制栅格
plt.grid(alpha=0.3)

# 设置x轴label
plt.xlabel("电影的时长 单位:min")

# 设置y轴label
plt.ylabel("频率")

# 设置标题title
plt.title("150部电影的直方统计图")

# 保存直方图
plt.savefig("./1.svg")

# 显示直方图
plt.show()


更多的图形请参照:matplotlib.org

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/853125.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号