详解用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 解析XML文件
Apr 15 Python
Python求解平方根的方法
Mar 11 Python
python3简单实现微信爬虫
Apr 09 Python
python在不同层级目录import模块的方法
Jan 31 Python
Python使用设计模式中的责任链模式与迭代器模式的示例
Mar 02 Python
python实现SMTP邮件发送功能
Jun 16 Python
python 性能优化方法小结
Mar 31 Python
Python设计模式之代理模式简单示例
Jan 09 Python
Pandas 同元素多列去重的实例
Jul 03 Python
Python转换时间的图文方法
Jul 01 Python
Python matplotlib读取excel数据并用for循环画多个子图subplot操作
Jul 14 Python
Python Pandas知识点之缺失值处理详解
May 11 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
实现了一个PHP5的getter/setter基类的代码
2007/02/25 PHP
PHP实现的json类实例
2015/07/28 PHP
页面右下角弹出提示框示例代码js版
2013/08/02 Javascript
jQuery操作select下拉框的text值和value值的方法
2014/05/31 Javascript
jQuery进行组件开发完整实例
2015/12/15 Javascript
浅谈Angularjs link和compile的使用区别
2016/10/21 Javascript
BootStrap Table后台分页时前台删除最后一页所有数据refresh刷新后无数据问题
2016/12/28 Javascript
Vue.js展示AJAX数据简单示例讲解
2017/03/29 Javascript
JavaScript实现移动端页面按手机屏幕分辨率自动缩放的最强代码
2017/08/18 Javascript
JavaScript中严格判断NaN的方法
2018/02/16 Javascript
原生js实现公告滚动效果
2021/01/10 Javascript
layui数据表格实现重载数据表格功能(搜索功能)
2019/07/27 Javascript
node运行js获得输出的三种方式示例详解
2020/07/02 Javascript
js实现省级联动(数据结构优化)
2020/07/17 Javascript
微信小程序换肤功能实现代码(思路详解)
2020/08/25 Javascript
[48:27]EG vs Liquid 2018国际邀请赛淘汰赛BO3 第二场 8.25
2018/08/29 DOTA
零基础写python爬虫之打包生成exe文件
2014/11/06 Python
python实现颜色rgb和hex相互转换的函数
2015/03/19 Python
将tensorflow的ckpt模型存储为npy的实例
2018/07/09 Python
python pands实现execl转csv 并修改csv指定列的方法
2018/12/12 Python
解决django后台样式丢失,css资源加载失败的问题
2019/06/11 Python
Python 计算任意两向量之间的夹角方法
2019/07/05 Python
django一对多模型以及如何在前端实现详解
2019/07/24 Python
纯css实现照片墙3D效果的示例代码
2017/11/13 HTML / CSS
字中字效果的实现【html5实例】
2016/05/03 HTML / CSS
乐天旅游台湾网站:Rakuten Travel TW
2017/06/01 全球购物
英国外籍人士的在线超市:British Corner Shop
2019/06/03 全球购物
台湾全方位线上课程与职能学习平台:TibaMe
2019/12/04 全球购物
学习十八大精神心得体会
2013/12/31 职场文书
早餐连锁店计划书
2014/01/08 职场文书
暑期培训班策划方案
2014/08/26 职场文书
酒店财务总监岗位职责
2015/04/03 职场文书
2019年七夕情人节浪漫祝福语大全!
2019/08/08 职场文书
解决mysql的int型主键自增问题
2021/07/15 MySQL
Go语言读取txt文档的操作方法
2022/01/22 Golang
vue如何实现关闭对话框后刷新列表
2022/04/08 Vue.js