详解用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 相关文章推荐
java直接调用python脚本的例子
Feb 16 Python
python学习之编写查询ip程序
Feb 27 Python
Python只用40行代码编写的计算器实例
May 10 Python
python编程测试电脑开启最大线程数实例代码
Feb 09 Python
详谈pandas中agg函数和apply函数的区别
Apr 20 Python
python抓取网页内容并进行语音播报的方法
Dec 24 Python
Pandas DataFrame数据的更改、插入新增的列和行的方法
Jun 25 Python
python中bs4.BeautifulSoup的基本用法
Jul 27 Python
python super用法及原理详解
Jan 20 Python
Python生成六万个随机,唯一的8位数字和数字组成的随机字符串实例
Mar 03 Python
python 如何实现遗传算法
Sep 22 Python
Docker如何部署Python项目的实现详解
Oct 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
xml+php动态载入与分页
2006/10/09 PHP
用PHP实现小写金额转换大写金额的代码(精确到分)
2012/01/10 PHP
php采集文章中的图片获取替换到本地(实现代码)
2013/07/08 PHP
PHP Opcache安装和配置方法介绍
2015/05/28 PHP
php解决crontab定时任务不能写入文件问题的方法分析
2019/09/16 PHP
JavaScript CSS修改学习第五章 给“上传”添加样式
2010/02/19 Javascript
两个JavaScript jsFiddle JSBin在线调试器
2010/03/14 Javascript
利用javascript解决图片缩放及其优化的代码
2012/05/23 Javascript
两种常用的javascript数组去重方法思路及代码
2013/03/26 Javascript
AngularJS 文件上传控件 ng-file-upload详解
2017/01/13 Javascript
jquery仿京东侧边栏导航效果
2017/03/02 Javascript
ES6正则的扩展实例详解
2017/04/25 Javascript
详解webpack打包vue时提取css
2017/05/26 Javascript
vue数据双向绑定的注意点
2017/06/23 Javascript
js实现点击按钮复制文本功能
2020/07/20 Javascript
vue中,在本地缓存中读写数据的方法
2018/09/21 Javascript
使用electron实现百度网盘悬浮窗口功能的示例代码
2018/10/24 Javascript
jQuery/JS监听input输入框值变化实例
2019/10/17 jQuery
[02:16]深扒TI7聊天轮盘语音出处2
2017/05/11 DOTA
Python中IPYTHON入门实例
2015/05/11 Python
Python 25行代码实现的RSA算法详解
2018/04/10 Python
selenium在执行phantomjs的API并获取执行结果的方法
2018/12/17 Python
python自动发微信监控报警
2019/09/06 Python
python绘制彩虹图
2019/12/16 Python
python字符串常用方法及文件简单读写的操作方法
2020/03/04 Python
Python文本文件的合并操作方法代码实例
2020/03/31 Python
英国电子专家:maplin
2019/09/04 全球购物
幼儿园国庆节活动方案
2014/02/01 职场文书
汽车运用工程专业求职信
2014/06/18 职场文书
班级学雷锋活动总结
2014/06/26 职场文书
代理人委托书
2014/08/01 职场文书
领导干部遵守党的政治纪律情况思想汇报
2014/09/14 职场文书
认真学习保证书
2015/02/26 职场文书
公司董事任命书
2015/09/21 职场文书
追悼会家属答谢词
2015/09/29 职场文书
HTML页面中使两个div并排显示的实现
2022/05/15 HTML / CSS