详解用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之有容乃大的list(3)
Sep 15 Python
python中sets模块的用法实例
Sep 30 Python
Python编程实现蚁群算法详解
Nov 13 Python
Python爬虫设置代理IP的方法(爬虫技巧)
Mar 04 Python
Python中is和==的区别详解
Nov 15 Python
Python爬虫beautifulsoup4常用的解析方法总结
Feb 25 Python
Python统计学一数据的概括性度量详解
Mar 03 Python
Python爬虫程序架构和运行流程原理解析
Mar 09 Python
解决python运行启动报错问题
Jun 01 Python
python和js交互调用的方法
Jun 23 Python
基于opencv实现简单画板功能
Aug 02 Python
聊一聊python常用的编程模块
May 14 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
星际争霸, 教主第一视角, ZvT经典龙蛇演义
2020/03/02 星际争霸
第十四节--命名空间
2006/11/16 PHP
PHP 安全检测代码片段(分享)
2013/07/05 PHP
php中实现用数组妩媚地生成要执行的sql语句
2015/07/10 PHP
微信支付开发动态链接Native支付
2016/07/12 PHP
ECMAScript 基础知识
2007/06/29 Javascript
可以将word转成html的js代码
2010/04/11 Javascript
jquery实现加载等待效果示例
2013/09/25 Javascript
跟我学习javascript的定时器
2015/11/19 Javascript
深入浅析同源策略和跨域访问
2015/11/26 Javascript
jQuery实现图片预加载效果
2015/11/27 Javascript
jQuery购物网页经典制作案例
2016/08/19 Javascript
详解数组Array.sort()排序的方法
2020/05/09 Javascript
vue中添加mp3音频文件的方法
2018/03/02 Javascript
微信小程序实现上拉加载功能
2019/11/20 Javascript
vue-cli脚手架的.babelrc文件用法说明
2020/09/11 Javascript
使用AutoJs实现微信抢红包的代码
2020/12/31 Javascript
Linux中安装Python的交互式解释器IPython的教程
2016/06/13 Python
Go/Python/Erlang编程语言对比分析及示例代码
2018/04/23 Python
python爬虫之模拟登陆csdn的实例代码
2018/05/18 Python
Django使用paginator插件实现翻页功能的实例
2018/10/24 Python
Python 实现自动完成A4标签排版打印功能
2020/04/09 Python
通过CSS3的object-fit来调整图片适配尺寸的技巧简介
2016/02/27 HTML / CSS
CSS3打造磨砂玻璃背景效果
2016/09/28 HTML / CSS
CSS3 Flex 弹性布局实例代码详解
2018/11/01 HTML / CSS
使用Html5 Stream开发实时监控系统
2020/06/02 HTML / CSS
SQL Server 2000数据库的文件有哪些,分别进行描述
2013/03/30 面试题
什么时候用assert
2015/05/08 面试题
晚宴邀请函范文
2014/01/15 职场文书
全国优秀辅导员事迹材料
2014/05/14 职场文书
运动会演讲稿300字
2014/08/25 职场文书
青年教师个人总结
2015/02/11 职场文书
小学语文教师研修日志
2015/11/13 职场文书
《世界多美呀》教学反思
2016/02/22 职场文书
感谢信的技巧及范例
2019/05/15 职场文书
python实现批量提取指定文件夹下同类型文件
2021/04/05 Python