详解用Python为直方图绘制拟合曲线的两种方法


Posted in Python onAugust 21, 2019

直方图是用于展示数据的分组分布状态的一种图形,用矩形的宽度和高度表示频数分布,通过直方图,用户可以很直观的看出数据分布的形状、中心位置以及数据的离散程度等。

在python中一般采用matplotlib库的hist来绘制直方图,至于如何给直方图添加拟合曲线(密度函数曲线),一般来说有以下两种方法。

方法一:采用matplotlib中的mlab模块

mlab模块是Python中强大的3D作图工具,立体感效果极佳。在这里使用mlab可以跳出直方图二维平面图形的限制,在此基础上再添加一条曲线。在这里,我们以鸢尾花iris中的数据为例,来举例说明。

import numpy as np
import matplotlib.mlab as mlab
import matplotlib.pyplot as plt
import pandas
# Load dataset
url =
"https://archive.ics.uci.edu/ml/machine-learning-databases/iris/iris.data"
names = ['sepal-length', 'sepal-width','petal-length', 'petal-width', 'class']
dataset = pandas.read_csv(url, names=names)
print(dataset.head(10))
# descriptions
print(dataset.describe())
x = dataset.iloc[:,0] #提取第一列的sepal-length变量
mu =np.mean(x) #计算均值
sigma =np.std(x)
mu,sigma

以上为通过python导入鸢尾花iris数据,然后提取第一列的sepal-length变量为研究对象,计算出其均值、标准差,接下来就绘制带拟合曲线的直方图。

num_bins = 30 #直方图柱子的数量

n, bins, patches = plt.hist(x, num_bins,normed=1, facecolor='blue', alpha=0.5)
#直方图函数,x为x轴的值,normed=1表示为概率密度,即和为一,绿色方块,色深参数0.5.返回n个概率,直方块左边线的x值,及各个方块对象
y = mlab.normpdf(bins, mu, sigma)#拟合一条最佳正态分布曲线y 
plt.plot(bins, y, 'r--') #绘制y的曲线
plt.xlabel('sepal-length') #绘制x轴
plt.ylabel('Probability') #绘制y轴
plt.title(r'Histogram : $\mu=5.8433$,$\sigma=0.8253$')#中文标题 u'xxx' 

plt.subplots_adjust(left=0.15)#左边距 
plt.show()

详解用Python为直方图绘制拟合曲线的两种方法

以上命令主要采用mlab.normpdf基于直方图的柱子数量、均值、方差来拟合曲线,然后再用plot画出来,这种方法的一个缺点就是画出的正态分布拟合曲线(红色虚线)并不一定能很好反映数据的分布情况,如上图所示。

方法二:采用seaborn库中的distplot绘制

Seaborn其实是在matplotlib的基础上进行了更高级的API封装,从而使得作图更加容易,在大多数情况下使用seaborn就能做出很具有吸引力的图,而使用matplotlib就能制作具有更多特色的图。应该把Seaborn视为matplotlib的补充,而不是替代物。

import seaborn as sns 
sns.set_palette("hls") #设置所有图的颜色,使用hls色彩空间
sns.distplot(x,color="r",bins=30,kde=True)
plt.show()

详解用Python为直方图绘制拟合曲线的两种方法

在这里主要使用sns.distplot(增强版dist),柱子数量bins也设置为30,kde=True表示是否显示拟合曲线,如果为False则只出现直方图。

在这里注意一下它与前边mlab.normpdf方法不同的是,拟合曲线不是正态的,而是更好地拟合了数据的分布情况,如上图,因此比mlab.normpdf更为准确。

进一步设置sns.distplot,可以采用kde_kws(拟合曲线的设置)、hist_kws(直方柱子的设置),可以得到:

import seaborn as sns 
import matplotlib as mpl 
sns.set_palette("hls") 
mpl.rc("figure", figsize=(6,4)) 
sns.distplot(x,bins=30,kde_kws={"color":"seagreen", "lw":3 }, hist_kws={ "color": "b" }) 
plt.show()

详解用Python为直方图绘制拟合曲线的两种方法

其中,lw为曲线粗细程度。

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持三水点靠木。

Python 相关文章推荐
python多进程中的内存复制(实例讲解)
Jan 05 Python
Anaconda入门使用总结
Apr 05 Python
在ubuntu16.04中将python3设置为默认的命令写法
Oct 31 Python
使用pandas把某一列的字符值转换为数字的实例
Jan 29 Python
python实现AES加密与解密
Mar 28 Python
python pygame实现方向键控制小球
May 17 Python
Python统计学一数据的概括性度量详解
Mar 03 Python
Pycharm自带Git实现版本管理的方法步骤
Sep 18 Python
python opencv角点检测连线功能的实现代码
Nov 24 Python
使paramiko库执行命令时在给定的时间强制退出功能的实现
Mar 03 Python
pytorch 实现在测试的时候启用dropout
May 27 Python
Python道路车道线检测的实现
Jun 27 Python
Python 使用指定的网卡发送HTTP请求的实例
Aug 21 #Python
Python turtle绘画象棋棋盘
Aug 21 #Python
Python随机函数库random的使用方法详解
Aug 21 #Python
Django+zTree构建组织架构树的方法
Aug 21 #Python
python的移位操作实现详解
Aug 21 #Python
基于Python的微信机器人开发 微信登录和获取好友列表实现解析
Aug 21 #Python
Python+OpenCv制作证件图片生成器的操作方法
Aug 21 #Python
You might like
PHP+MySQL实现无极限分类栏目的方法
2015/12/23 PHP
PHP常见数组函数用法小结
2016/03/21 PHP
php无限级分类实现方法分析
2016/10/19 PHP
php和asp语法上的区别总结
2019/05/12 PHP
JS 无法通过W3C验证的处理方法
2010/03/09 Javascript
jquery实现div拖拽宽度示例代码
2013/07/31 Javascript
node+express+jade制作简单网站指南
2014/11/26 Javascript
javascript数组遍历的方法实例分析
2016/09/13 Javascript
Javascript 对cookie操作详解及实例
2016/12/29 Javascript
js+css3实现旋转效果
2017/01/20 Javascript
Vue 滚动行为的具体使用方法
2017/09/13 Javascript
微信小程序封装的HTTP请求示例【附升级版】
2019/05/11 Javascript
详解基于Vue的支持数据双向绑定的select组件
2019/09/02 Javascript
[03:43]2014DOTA2西雅图国际邀请赛 newbee战队巡礼
2014/07/07 DOTA
[01:01]青春无憾,一战成名——DOTA2全国高校联赛开启
2018/02/25 DOTA
[00:10]DOTA2全国高校联赛速递
2018/05/30 DOTA
python实现apahce网站日志分析示例
2014/04/02 Python
Python的Django框架中的数据过滤功能
2015/07/17 Python
分享一个可以生成各种进制格式IP的小工具实例代码
2017/07/28 Python
Centos 升级到python3后pip 无法使用的解决方法
2018/06/12 Python
python pygame模块编写飞机大战
2018/11/20 Python
python是怎么被发明的
2020/06/15 Python
Python 捕获代码中所有异常的方法
2020/08/03 Python
Django权限控制的使用
2021/01/07 Python
实例讲解使用CSS实现多边框和透明边框的方法
2015/09/08 HTML / CSS
蹦床仓库:Trampoline Warehouse
2018/12/06 全球购物
北京SQL新华信咨询
2016/09/30 面试题
大学生全国两会报告感想
2014/03/17 职场文书
元旦寄语大全
2014/04/10 职场文书
纪念九一八事变演讲稿:青少年应树立远大理想
2014/09/14 职场文书
2014审计局领导班子民主生活会对照检查材料思想汇报
2014/09/20 职场文书
人身损害赔偿协议书范本
2014/09/27 职场文书
大学生村官工作总结2015
2015/04/09 职场文书
公司门卫岗位职责
2015/04/13 职场文书
Nest.js参数校验和自定义返回数据格式详解
2021/03/29 Javascript
解决redis批量删除key值的问题
2022/03/23 Redis