详解用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爬虫实战之爬取京东商城实例教程
Apr 24 Python
Python使用matplotlib的pie函数绘制饼状图功能示例
Jan 08 Python
python实现画一颗树和一片森林
Jun 25 Python
python与caffe改变通道顺序的方法
Aug 04 Python
基于python实现高速视频传输程序
May 05 Python
基于Python获取照片的GPS位置信息
Jan 20 Python
Django使用Celery加redis执行异步任务的实例内容
Feb 20 Python
sklearn的predict_proba使用说明
Jun 28 Python
如何Tkinter模块编写Python图形界面
Oct 14 Python
如何利用python读取micaps文件详解
Oct 18 Python
使用Python快速打开一个百万行级别的超大Excel文件的方法
Mar 02 Python
Django模型层实现多表关系创建和多表操作
Jul 21 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合并数组+与array_merge的区别分析
2010/08/01 PHP
PHP的SQL注入实现(测试代码安全不错)
2011/02/27 PHP
使用openssl实现rsa非对称加密算法示例
2014/01/24 PHP
PHP实现的下载远程图片自定义函数分享
2015/01/28 PHP
php 实现进制相互转换
2016/04/07 PHP
PHP判断一个数组是另一个数组子集的方法详解
2017/07/31 PHP
PHP从尾到头打印链表实例讲解
2018/09/27 PHP
laravel框架数据库操作、查询构建器、Eloquent ORM操作实例分析
2019/12/20 PHP
jquery 倒计时效果实现秒杀思路
2013/09/11 Javascript
jquery easyui combox一些实用的小方法
2013/12/25 Javascript
jQuery选择器全面总结
2014/01/06 Javascript
IE9+已经不对document.createElement向下兼容的解决方法
2015/09/14 Javascript
三种带箭头提示框总结实例
2016/06/14 Javascript
基于jQuery实现多标签页切换的效果(web前端开发)
2016/07/24 Javascript
深入理解Angular2 模板语法
2016/08/07 Javascript
JavaScript 闭包机制详解及实例代码
2016/10/10 Javascript
nodejs个人博客开发第二步 入口文件
2017/04/12 NodeJs
使用Vue Composition API写出清晰、可扩展的表单实现
2020/06/10 Javascript
toString.call()通用的判断数据类型方法示例
2020/08/28 Javascript
Python使用pymysql小技巧
2017/06/04 Python
Python实现发送与接收邮件的方法详解
2018/03/28 Python
sublime python3 输入换行不结束的方法
2018/04/19 Python
使用python接受tgam的脑波数据实例
2020/04/09 Python
HTML5 CSS3打造相册效果附源码下载
2014/06/16 HTML / CSS
德国柯吉澳趣味家居:Koziol
2017/08/24 全球购物
英国最大的邮寄种子和植物公司:Thompson & Morgan
2017/09/21 全球购物
C语言面试题
2013/05/19 面试题
解释一下Windows的消息机制
2014/01/30 面试题
恒华伟业笔试面试题
2015/02/26 面试题
MySQL面试题目集锦
2016/04/14 面试题
员工廉洁自律承诺书
2014/05/26 职场文书
花坛标语大全
2014/06/30 职场文书
巾帼志愿者活动方案
2014/08/17 职场文书
自习课吵闹检讨书范文
2014/09/26 职场文书
导游词之秦皇岛燕塞湖
2020/01/03 职场文书
利用Matlab绘制各类特殊图形的实例代码
2021/07/16 Python