详解用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网络编程之数据传输UDP实例分析
May 20 Python
Django自定义插件实现网站登录验证码功能
Apr 19 Python
python实现人脸识别代码
Nov 08 Python
用Eclipse写python程序
Feb 10 Python
Python面向对象程序设计类的封装与继承用法示例
Apr 12 Python
详解python函数的闭包问题(内部函数与外部函数详述)
May 17 Python
python3实现mysql导出excel的方法
Jul 31 Python
Python爬虫爬取糗事百科段子实例分享
Jul 31 Python
基于python tkinter的点名小程序功能的实例代码
Aug 22 Python
python文件排序的方法总结
Sep 13 Python
python实现简单的tcp 文件下载
Sep 16 Python
Python自动创建Excel并获取内容
Sep 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
《魔兽争霸3:重制版》翻车了?你想要的我们都没有
2019/11/07 魔兽争霸
PHP __autoload函数(自动载入类文件)的使用方法
2012/02/04 PHP
Laravel实现自定义错误输出内容的方法
2016/10/10 PHP
php使用Jpgraph创建柱状图展示年度收支表效果示例
2017/02/15 PHP
深入讲解PHP的对象注入(Object Injection)
2017/03/01 PHP
Jquery 基础学习笔记之文档处理
2009/05/29 Javascript
Javascript公共脚本库系列(一): 弹出层脚本
2011/02/24 Javascript
jQuery基本过滤选择器使用介绍
2013/04/18 Javascript
JQuery实现鼠标移动到图片上显示边框效果
2014/01/09 Javascript
JavaScript定义类和对象的方法
2014/11/26 Javascript
JQuery使用index方法获取Jquery对象数组下标的方法
2015/05/18 Javascript
js判断当前页面用什么浏览器打开的方法
2016/01/06 Javascript
jQuery实现侧浮窗与中浮窗切换效果的方法
2016/09/05 Javascript
Angular4项目中添加i18n国际化插件ngx-translate的步骤详解
2017/07/02 Javascript
微信小程序 功能函数小结(手机号验证*、密码验证*、获取验证码*)
2017/12/08 Javascript
JS实现可针对算术表达式求值的计算器功能示例
2018/09/04 Javascript
详解在Angular4中使用ng2-baidu-map的方法
2019/06/19 Javascript
vue中更改数组中属性,在页面中不生效的解决方法
2019/10/30 Javascript
在vue项目中promise解决回调地狱和并发请求的问题
2020/11/09 Javascript
浅谈编码,解码,乱码的问题
2016/12/30 Python
python中如何使用正则表达式的集合字符示例
2017/10/09 Python
Django实现微信小程序的登录验证功能并维护登录态
2019/07/04 Python
python多线程同步实例教程
2019/08/11 Python
Python 内置函数globals()和locals()对比详解
2019/12/23 Python
Python换行与不换行的输出实例
2020/02/19 Python
Python如何解除一个装饰器
2020/08/07 Python
Python Http请求json解析库用法解析
2020/11/28 Python
NICKIS.com荷兰:设计师儿童时装
2020/01/08 全球购物
计算机本科生自荐信
2013/10/15 职场文书
教师试用期自我鉴定
2014/02/12 职场文书
工程类专业自荐信范文
2014/03/09 职场文书
生日主持词
2014/03/20 职场文书
2014年内勤工作总结
2014/11/24 职场文书
Python3 类型标注支持操作
2021/06/02 Python
使用 DataAnt 监控 Apache APISIX的原理解析
2022/07/07 Servers
vue实现input输入模糊查询的三种方式
2022/08/14 Vue.js