详解用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处理cookie详解
Feb 07 Python
详解Python中的文本处理
Apr 11 Python
如何使用python爬取csdn博客访问量
Feb 14 Python
使用PyCharm创建Django项目及基本配置详解
Oct 24 Python
Python代码打开本地.mp4格式文件的方法
Jan 03 Python
Python图像处理实现两幅图像合成一幅图像的方法【测试可用】
Jan 04 Python
用Pycharm实现鼠标滚轮控制字体大小的方法
Jan 15 Python
Pycharm 实现下一个文件引用另外一个文件的方法
Jan 17 Python
Python之修改图片像素值的方法
Jul 03 Python
Python numpy线性代数用法实例解析
Nov 15 Python
flask框架json数据的拿取和返回操作示例
Nov 28 Python
如何用Matlab和Python读取Netcdf文件
Feb 19 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获取文件名后缀常用方法小结
2015/02/24 PHP
CentOS 安装 PHP5.5+Redis+XDebug+Nginx+MySQL全纪录
2015/03/25 PHP
php中的异常和错误浅析
2017/05/03 PHP
tp5.1 框架数据库常见操作详解【添加、删除、更新、查询】
2020/05/26 PHP
jquery实现的超出屏幕时把固定层变为定位层的代码
2010/02/23 Javascript
JS定时刷新页面及跳转页面的方法
2013/07/04 Javascript
使用JavaScript链式编程实现模拟Jquery函数
2014/12/21 Javascript
Javascript中实现trim()函数的两种方法
2015/02/04 Javascript
jQuery实现防止提交按钮被双击的方法
2015/03/24 Javascript
浅析Node.js实现HTTP文件下载
2016/08/05 Javascript
Jquery遍历select option和添加移除option的实现方法
2016/08/26 Javascript
jquery移除了live()、die(),新版事件绑定on()、off()的方法
2016/10/26 Javascript
Javascript将图片的绝对路径转换为base64编码的方法
2018/01/11 Javascript
vue组件通信传值操作示例
2019/01/08 Javascript
详解vue中使用vue-quill-editor富文本小结(图片上传)
2019/04/24 Javascript
高性能js数组去重(12种方法,史上最全)
2019/12/21 Javascript
解决微信小程序scroll-view组件无横向滚动的问题
2020/02/04 Javascript
python中关于时间和日期函数的常用计算总结(time和datatime)
2013/03/08 Python
一个简单的python程序实例(通讯录)
2013/11/29 Python
修改Python的pyxmpp2中的主循环使其提高性能
2015/04/24 Python
Python批量重命名同一文件夹下文件的方法
2015/05/25 Python
Python程序中用csv模块来操作csv文件的基本使用教程
2016/03/03 Python
python编程实现12306的一个小爬虫实例
2017/12/27 Python
Python决策树和随机森林算法实例详解
2018/01/30 Python
Python使用numpy实现BP神经网络
2018/03/10 Python
python 实现将多条曲线画在一幅图上的方法
2019/07/07 Python
浅谈django2.0 ForeignKey参数的变化
2019/08/06 Python
Python全面分析系统的时域特性和频率域特性
2020/02/26 Python
html5小技巧之通过document.head获取head元素
2014/06/04 HTML / CSS
德国珠宝和配件商店:Styleserver
2021/02/23 全球购物
大学生职业生涯规划书模版
2013/12/30 职场文书
生死抉择观后感
2015/06/09 职场文书
教务处干事工作总结
2015/08/14 职场文书
python文件名批量重命名脚本实例代码
2021/04/22 Python
Django给表单添加honeypot验证增加安全性
2021/05/06 Python
用Python可视化新冠疫情数据
2022/01/18 Python