详解用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类的专用方法实例分析
Jan 09 Python
浅析Python多线程下的变量问题
Apr 28 Python
详解python3百度指数抓取实例
Dec 12 Python
python脚本爬取字体文件的实现方法
Apr 29 Python
Python获取系统所有进程PID及进程名称的方法示例
May 24 Python
Python2实现的图片文本识别功能详解
Jul 11 Python
解决tensorflow测试模型时NotFoundError错误的问题
Jul 26 Python
python生成1行四列全2矩阵的方法
Aug 04 Python
python使用参数对嵌套字典进行取值的方法
Apr 26 Python
Python实现的服务器示例小结【单进程、多进程、多线程、非阻塞式】
May 23 Python
python+selenium定时爬取丁香园的新型冠状病毒数据并制作出类似的地图(部署到云服务器)
Feb 09 Python
Python加速程序运行的方法
Jul 29 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 生成文字png图片的代码
2011/04/17 PHP
解析argc argv在php中的应用
2013/06/24 PHP
ThinkPHP中URL路径访问与模块控制器之间的关系
2014/08/23 PHP
PHP实现的文件上传类与用法详解
2017/07/05 PHP
实例介绍PHP中zip_open()函数用法
2019/02/15 PHP
Linux下安装Memcached服务器和客户端与PHP使用示例
2019/04/15 PHP
PHP获取类私有属性的3种方法
2020/09/10 PHP
点击广告后才能获得下载地址
2006/10/26 Javascript
几行代码轻松搞定jquery实现flash8类似的连接效果
2007/05/03 Javascript
ExtJs 3.1 XmlTreeLoader Example Error
2010/02/09 Javascript
javascript删除option选项的多种方法总结
2013/11/22 Javascript
div浮层,滚动条移动,位置保持不变的4种方法汇总
2013/12/11 Javascript
jquery实现的导航固定效果
2014/04/28 Javascript
jQuery实现根据类型自动显示和隐藏表单
2015/03/18 Javascript
javascript实现简单的省市区三级联动
2015/05/14 Javascript
在Javascript中处理数组之toSource()方法的使用
2015/06/09 Javascript
jQuery+JSON实现AJAX二级联动实例分析
2015/12/18 Javascript
全面介绍javascript实用技巧及单竖杠
2016/07/18 Javascript
D3.js实现饼状图的方法详解
2016/09/21 Javascript
jQuery实现优雅的弹窗效果(6)
2017/02/08 Javascript
如何重置vue打印变量的显示方式
2017/12/06 Javascript
浅谈从React渲染流程分析Diff算法
2018/09/08 Javascript
vue中的v-model原理,与组件自定义v-model详解
2020/08/04 Javascript
Python with的用法
2014/08/22 Python
python查询mysql中文乱码问题
2014/11/09 Python
运用TensorFlow进行简单实现线性回归、梯度下降示例
2018/03/05 Python
VScode编写第一个Python程序HelloWorld步骤
2018/04/06 Python
python pandas.DataFrame选取、修改数据最好用.loc,.iloc,.ix实现
2018/06/11 Python
利用Python如何生成便签图片详解
2018/07/09 Python
python excel转换csv代码实例
2019/08/26 Python
使用python实现时间序列白噪声检验方式
2020/06/03 Python
python实现快速文件格式批量转换的方法
2020/10/16 Python
学术会议邀请函范文
2014/01/22 职场文书
门卫岗位职责说明书
2014/08/18 职场文书
党委书记个人对照检查材料
2014/09/15 职场文书
肖申克的救赎观后感
2015/06/02 职场文书