详解用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中正则表达式的使用详解
Oct 17 Python
Python正则表达式实现截取成对括号的方法
Jan 06 Python
python爬虫 正则表达式使用技巧及爬取个人博客的实例讲解
Oct 20 Python
python监控进程脚本
Apr 12 Python
Python 类的特殊成员解析
Jun 20 Python
Python3.6使用tesseract-ocr的正确方法
Oct 17 Python
对Python+opencv将图片生成视频的实例详解
Jan 08 Python
Python中一般处理中文的几种方法
Mar 06 Python
完美解决python3.7 pip升级 拒绝访问问题
Jul 12 Python
python 进程的几种创建方式详解
Aug 29 Python
python如何导入依赖包
Jul 13 Python
python简单实现插入排序实例代码
Dec 16 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
初学CAKEPHP 基础教程
2009/11/02 PHP
fgetcvs在linux的问题
2012/01/15 PHP
PHP中的按位与和按位或操作示例
2014/01/27 PHP
PHP中防止SQL注入方法详解
2014/12/25 PHP
jquery $.ajax相关用法分享
2012/03/16 Javascript
JavaScript词法作用域与调用对象深入理解
2012/11/29 Javascript
jQuery实现点击该行即可删除HTML表格行
2014/10/17 Javascript
jquery调取json数据实现省市级联的方法
2015/01/29 Javascript
jQuery实现按键盘方向键翻页特效
2015/03/18 Javascript
JS打字效果的动态菜单代码分享
2015/08/21 Javascript
基于JavaScript如何实现私有成员的语法特征及私有成员的实现方式
2015/10/28 Javascript
浅谈小程序 setData学问多
2019/02/20 Javascript
js实现鼠标拖拽缩放div实例代码
2019/03/25 Javascript
angular异步验证防抖踩坑实录
2019/12/01 Javascript
JS跨浏览器解析XML应用过程详解
2020/10/16 Javascript
JavaScript实现无限轮播效果
2020/11/19 Javascript
[01:39:04]DOTA2-DPC中国联赛 正赛 SAG vs CDEC BO3 第二场 2月1日
2021/03/11 DOTA
Windows下为Python安装Matplotlib模块
2015/11/06 Python
Python随机生成均匀分布在三角形内或者任意多边形内的点
2017/12/14 Python
Python3最长回文子串算法示例
2019/03/04 Python
Python中使用__new__实现单例模式并解析
2019/06/25 Python
对python中各个response的使用说明
2020/03/28 Python
Clarins娇韵诗美国官网:法国天然护肤品牌
2016/09/26 全球购物
印尼旅游网站:via
2017/11/12 全球购物
Amcal中文官网:澳洲综合性连锁药房
2019/03/28 全球购物
MYSQL相比于其他数据库有哪些特点
2013/07/19 面试题
儿科护理实习自我鉴定
2013/09/19 职场文书
制药工程专业应届生求职信
2013/09/24 职场文书
门店业绩提升方案
2014/06/08 职场文书
2014年卫生工作总结
2014/11/27 职场文书
2015年企业新年寄语
2014/12/08 职场文书
经理岗位职责范本
2015/04/15 职场文书
珍惜时间的诗歌赏析
2019/08/23 职场文书
深入理解Pytorch微调torchvision模型
2021/11/11 Python
InterProcessMutex实现zookeeper分布式锁原理
2022/03/21 Java/Android
MySQL创建管理LIST分区
2022/04/13 MySQL