详解用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数据分析中Groupby用法之通过字典或Series进行分组的实例
Dec 08 Python
在Python 中同一个类两个函数间变量的调用方法
Jan 31 Python
啥是佩奇?使用Python自动绘画小猪佩奇的代码实例
Feb 20 Python
python tkinter实现彩球碰撞屏保
Jul 30 Python
python多线程实现TCP服务端
Sep 03 Python
django创建简单的页面响应实例教程
Sep 06 Python
python实现图片二值化及灰度处理方式
Dec 07 Python
python3实现raspberry pi(树莓派)4驱小车控制程序
Feb 12 Python
tensorflow保持每次训练结果一致的简单实现
Feb 17 Python
Java多线程实现四种方式原理详解
Jun 02 Python
django 模型字段设置默认值代码
Jul 15 Python
Pycharm 如何设置HTML文件自动补全代码或标签
May 21 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
全国FM电台频率大全 - 30 宁夏回族自治区
2020/03/11 无线电
咖啡产品发展的三大浪潮
2021/03/04 咖啡文化
文件上传程序的全部源码
2006/10/09 PHP
NOT NULL 和NULL
2007/01/15 PHP
模板引擎smarty工作原理以及使用示例
2014/05/25 PHP
PHP基于php_imagick_st-Q8.dll实现JPG合成GIF图片的方法
2014/07/11 PHP
php实现将上传word文件转为html的方法
2015/06/03 PHP
Zend Framework过滤器Zend_Filter用法详解
2016/12/09 PHP
给大家分享几个常用的PHP函数
2017/01/15 PHP
PHP iconv()函数字符编码转换的问题讲解
2019/03/22 PHP
javascript 计算两个整数的百分比值
2009/12/26 Javascript
jQuery前台数据获取实现代码
2011/03/16 Javascript
JS简单实现多级Select联动菜单效果代码
2015/09/06 Javascript
javascript实现瀑布流加载图片原理
2016/02/02 Javascript
详解JavaScript时间处理之几个月前或几个月后的指定日期
2016/12/21 Javascript
JavaScript实现鼠标滚轮控制页面图片切换功能示例
2017/10/14 Javascript
Vue实现微信支付功能遇到的坑
2019/06/05 Javascript
简单了解JavaScript中的执行上下文和堆栈
2019/06/24 Javascript
微信小程序实现语音识别转文字功能及遇到的坑
2019/08/02 Javascript
vue.js+ElementUI实现进度条提示密码强度效果
2020/01/18 Javascript
[01:36]DOTA2完美大师赛趣味视频之与队友相处的十万个技巧
2017/11/19 DOTA
python服务器与android客户端socket通信实例
2014/11/12 Python
Python中的map()函数和reduce()函数的用法
2015/04/27 Python
在unittest中使用 logging 模块记录测试数据的方法
2018/11/30 Python
python的sorted用法详解
2019/06/25 Python
使用python telnetlib批量备份交换机配置的方法
2019/07/25 Python
django实现支付宝支付实例讲解
2019/10/17 Python
html5构建触屏网站之网站尺寸探讨
2013/01/07 HTML / CSS
越南母婴用品购物网站:Kids Plaza
2020/04/09 全球购物
网球场地租赁协议范本
2014/10/07 职场文书
小学少先队辅导员述职报告
2015/01/10 职场文书
2015年医院科室工作总结范文
2015/05/26 职场文书
紫日观后感
2015/06/05 职场文书
【D4DJ】美少女DJ企划 动画将于明年冬季开播第2季
2022/04/11 日漫
MySql统计函数COUNT的具体使用详解
2022/08/14 MySQL
教你使用Ubuntu搭建DNS服务器
2022/09/23 Servers