详解用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设置windows桌面壁纸的实现代码
Jan 28 Python
Python中关键字is与==的区别简述
Jul 31 Python
Python 正则表达式实现计算器功能
Apr 29 Python
rabbitmq(中间消息代理)在python中的使用详解
Dec 14 Python
Python中出现IndentationError:unindent does not match any outer indentation level错误的解决方法
Apr 18 Python
使用pyecharts1.7进行简单的可视化大全
May 17 Python
keras读取h5文件load_weights、load代码操作
Jun 12 Python
python 监控logcat关键字功能
Sep 04 Python
详解python命令提示符窗口下如何运行python脚本
Sep 11 Python
使用Python爬取Json数据的示例代码
Dec 07 Python
解决Pyinstaller打包软件失败的一个坑
Mar 04 Python
python3读取文件指定行的三种方法
May 24 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_intersect(),array_intersect_assoc(),array_inter_key()函数的小问题
2011/05/29 PHP
PHP数据类型之布尔型的介绍
2013/04/28 PHP
详解PHP中instanceof关键字及instanceof关键字有什么作用
2015/11/05 PHP
php实现简单的上传进度条
2015/11/17 PHP
PHP封装的数据库保存session功能类
2016/07/11 PHP
示例详解Laravel重置密码代码重构
2016/08/10 PHP
删除PHP数组中的重复元素的实现代码
2017/04/10 PHP
Yii框架使用PHPExcel导出Excel文件的方法分析【改进版】
2019/07/24 PHP
laravel validate 设置为中文的例子(验证提示为中文)
2019/09/29 PHP
jQuery dialog 异步调用ashx,webservice数据的代码
2010/08/03 Javascript
Jquery实现兼容各大浏览器的Enter回车切换输入焦点的方法
2014/09/01 Javascript
Shell脚本实现Linux系统和进程资源监控
2015/03/05 Javascript
基于jQuery实现的扇形定时器附源码下载
2015/10/20 Javascript
js仿微博实现统计字符和本地存储功能
2015/12/22 Javascript
JS随机打乱数组的方法小结
2016/06/22 Javascript
jQuery实现web页面樱花坠落的特效
2017/06/01 jQuery
详解webpack解惑:require的五种用法
2017/06/09 Javascript
javascript将list转换成树状结构的实例
2017/09/08 Javascript
react-native fetch的具体使用方法
2017/11/01 Javascript
JavaScript如何实现元素全排列实例代码
2019/05/14 Javascript
微信小程序开发打开另一个小程序的实现方法
2020/05/17 Javascript
解决vue2中使用elementUi打包报错的问题
2020/09/22 Javascript
[02:04]2018DOTA2亚洲邀请赛Secret赛前采访
2018/04/03 DOTA
python实现字符串和日期相互转换的方法
2015/05/13 Python
python爬虫基本知识
2018/03/05 Python
Pyqt5 基本界面组件之inputDialog的使用
2019/06/25 Python
Pytorch在dataloader类中设置shuffle的随机数种子方式
2020/01/14 Python
keras load model时出现Missing Layer错误的解决方式
2020/06/11 Python
Python urllib库如何添加headers过程解析
2020/10/05 Python
Python 排序最长英文单词链(列表中前一个单词末字母是下一个单词的首字母)
2020/12/14 Python
解决canvas转base64/jpeg时透明区域变成黑色背景的方法
2016/10/23 HTML / CSS
退伍老兵事迹材料
2014/01/31 职场文书
师德师风事迹材料
2014/12/20 职场文书
六年级学生评语大全
2014/12/26 职场文书
2015年行风建设工作总结
2015/05/15 职场文书
导游词之阳朔遇龙河
2019/12/16 职场文书