详解用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 相关文章推荐
使用Mixin设计模式进行Python编程的方法讲解
Jun 21 Python
Python实现屏幕截图的代码及函数详解
Oct 01 Python
Python基础知识_浅谈用户交互
May 31 Python
简单实现python进度条脚本
Dec 18 Python
python实现超市扫码仪计费
May 30 Python
python pandas 如何替换某列的一个值
Jun 09 Python
python抓取京东小米8手机配置信息
Nov 13 Python
对Python的zip函数妙用,旋转矩阵详解
Dec 13 Python
将pytorch转成longtensor的简单方法
Feb 18 Python
python encrypt 实现AES加密的实例详解
Feb 20 Python
Python中实现一行拆多行和多行并一行的示例代码
Sep 06 Python
Python爬取酷狗MP3音频的步骤
Feb 26 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_filter()函数去掉多维空值的代码分享
2012/09/07 PHP
使用php判断网页是否gzip压缩
2013/06/25 PHP
php使用strip_tags()去除html标签仍有空白的解决方法
2016/07/28 PHP
thinkPHP5.1框架路由::get、post请求简单用法示例
2019/05/06 PHP
php实现微信公众号创建自定义菜单功能的实例代码
2019/06/11 PHP
php设计模式之工厂方法模式分析【星际争霸游戏案例】
2020/01/23 PHP
jQuery创建自己的插件(自定义插件)的方法
2010/06/10 Javascript
js 利用className得到对象的实现代码
2011/11/15 Javascript
php+js实现倒计时功能
2014/06/02 Javascript
jQuery实现获取h1-h6标题元素值的方法
2017/03/06 Javascript
详解HTTPS 的原理和 NodeJS 的实现
2017/07/04 NodeJs
Vue中父组件向子组件通信的方法
2017/07/11 Javascript
Vue 滚动行为的具体使用方法
2017/09/13 Javascript
Javascript中parseInt的正确使用方式
2018/10/17 Javascript
jQuery选择器选中最后一个元素,倒数第二个元素操作示例
2018/12/10 jQuery
vue 搭建后台系统模块化开发详解
2019/05/01 Javascript
带你使用webpack快速构建web项目的方法
2020/11/12 Javascript
python实现批量转换文件编码(批转换编码示例)
2014/01/23 Python
python中使用enumerate函数遍历元素实例
2014/06/16 Python
python的dict,set,list,tuple应用详解
2014/07/24 Python
Python简单调用MySQL存储过程并获得返回值的方法
2015/07/20 Python
python利用标准库如何获取本地IP示例详解
2017/11/01 Python
python获取本机所有IP地址的方法
2018/12/26 Python
详解python中的hashlib模块的使用
2019/04/22 Python
详解python 条件语句和while循环的实例代码
2020/12/28 Python
如何用tempfile库创建python进程中的临时文件
2021/01/28 Python
selenium3.0+python之环境搭建的方法步骤
2021/02/01 Python
股份合作协议书
2014/04/12 职场文书
忠诚教育心得体会
2014/09/03 职场文书
十一国庆节“向国旗敬礼”主题班会活动方案
2014/09/27 职场文书
汽车机电维修工求职信
2014/09/30 职场文书
儿园租房协议书范本
2014/12/02 职场文书
就业意向协议书
2015/01/29 职场文书
个人收入证明范本
2015/06/12 职场文书
pandas提升计算效率的一些方法汇总
2021/05/30 Python
Android存储中最基本的文件存储方式
2022/04/30 Java/Android