详解用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脚本生成Android SALT扰码的方法
Sep 18 Python
python实现k均值算法示例(k均值聚类算法)
Mar 16 Python
Python中的两个内置模块介绍
Apr 05 Python
通过数据库对Django进行删除字段和删除模型的操作
Jul 21 Python
Python中数字以及算数运算符的相关使用
Oct 12 Python
详解pandas的外部数据导入与常用方法
May 01 Python
Python基础学习之类与实例基本用法与注意事项详解
Jun 17 Python
在macOS上搭建python环境的实现方法
Aug 13 Python
TensorFlow tensor的拼接实例
Jan 19 Python
QML实现钟表效果
Jun 02 Python
Python 整行读取文本方法并去掉readlines换行\n操作
Sep 03 Python
python tkinter实现下载进度条及抖音视频去水印原理
Feb 07 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
Smarty结合Ajax实现无刷新留言本实例
2007/01/02 PHP
如何突破PHP程序员的技术瓶颈分析
2011/07/17 PHP
Window下PHP三种运行方式图文详解
2013/06/11 PHP
Laravel 5框架学习之表单
2015/04/08 PHP
php文件读取方法实例分析
2015/06/20 PHP
PHP7常量数组用法分析
2016/09/26 PHP
php file_get_contents取文件中数组元素的方法
2017/04/01 PHP
JavaScript中的面向对象介绍
2012/06/30 Javascript
jcrop基本参数一览
2013/07/16 Javascript
解决Jquery向页面append新元素之后事件的绑定问题
2015/03/16 Javascript
jquery实现树形菜单完整代码
2015/12/29 Javascript
Js删除数组中某一项或几项的几种方法(推荐)
2016/07/27 Javascript
JavaScript中的this引用(推荐)
2016/08/05 Javascript
Vue.js实现模拟微信朋友圈开发demo
2017/04/20 Javascript
浅谈Vue render函数在ElementUi中的应用
2018/09/06 Javascript
vue 本地服务不能被外部IP访问的完美解决方法
2018/10/29 Javascript
Vuex实现数据共享的方法
2019/12/20 Javascript
python中print的不换行即时输出的快速解决方法
2016/07/20 Python
JSON Web Tokens的实现原理
2017/04/02 Python
python编程通过蒙特卡洛法计算定积分详解
2017/12/13 Python
PyQt5每天必学之QSplitter实现窗口分隔
2018/04/19 Python
Python使用tkinter模块实现推箱子游戏
2019/10/08 Python
利用pyshp包给shapefile文件添加字段的实例
2019/12/06 Python
python获取整个网页源码的方法
2020/08/03 Python
python中使用.py配置文件的方法详解
2020/11/23 Python
利用CSS3伪元素实现逐渐发光的方格边框
2017/05/07 HTML / CSS
Foot Locker意大利官网:全球领先的运动鞋和服装零售商
2017/05/30 全球购物
世界排名第一的运动鞋市场:Flight Club
2020/01/03 全球购物
如何利用cmp命令比较文件
2016/04/11 面试题
生物科学专业职业规划书范文
2014/02/11 职场文书
信息服务专业毕业生求职信
2014/03/02 职场文书
学习保证书100字
2015/02/26 职场文书
大学生实习推荐信
2015/03/27 职场文书
关于召开会议的通知
2015/04/15 职场文书
python pygame 开发五子棋双人对弈
2022/05/02 Python
介绍一下28个JS常用数组方法
2022/05/06 Javascript