Python绘图工具seaborn,教会你如何绘制更加精美的图形(一)

简介: Python绘图工具seaborn,教会你如何绘制更加精美的图形(一)

seaborn----绘制统计图形


Matplotlib虽然已经是比较优秀的绘图库了,但是它有个今人头疼的问题,那就是API使用过于复杂,它里面有上千个函数和参数,属于典型的那种可以用它做任何事,却无从下手。


Seaborn基于 Matplotlib核心库进行了更高级的API封装,可以轻松地画出更漂亮的图形,而Seaborn的漂亮主要体现在配色更加舒服,以及图形元素的样式更加细腻。


不过,使用Seaborn绘制图表之前,需要安装和导入绘图的接口,具体代码如下:


#安装
pip install seaborn
#导入
import seaborn as sns


接下来,我们正式进入 Seaborn库的学习

1.可视化数据的分布


当处理一组数据时,通常先要做的就是了解变量是如何分布的。


对于单变量的数据来说 采用直方图或核密度曲线是个不错的选择,

对于双变量来说,可采用多面板图形展现,比如 散点图、二维直方图、核密度估计图形等。

针对这种情况, Seaborn库提供了对单变量和双变量分布的绘制函数,如 displot()函数、 jointplot()函数,下面来介绍这些函数的使用,具体内容如下:

2 绘制单变量分布

可以采用最简单的直方图描述单变量的分布情况。

Seaborn中提供了 distplot()函数,它默认绘制的是一个带有核密度估计曲线的直方图。 distplot()函数的语法格式如下。


seaborn.distplot(a, bins=None, hist=True, kde=True, rug=False, fit=None, color=None)

上述函数中常用参数的含义如下:


(1) a:表示要观察的数据,可以是 Series、一维数组或列表。

(2) bins:用于控制条形的数量。

(3) hist:接收布尔类型,表示是否绘制(标注)直方图。

(4) kde:接收布尔类型,表示是否绘制高斯核密度估计曲线。

(5) rug:接收布尔类型,表示是否在支持的轴方向上绘制 观测值竖线 rugplot。 表示数据集中情况

(6)fit:一个带有fit方法的对象,返回一个元组,该元组可以传递给pdf方法一个位置参数,该位置参数遵循一个值的网格用于评估pdf。

(7){hist, kde, rug, fit}_kws:字典,可选参数。底层绘图函数的关键字参数。

(8)color:matplotlib color,可选参数. 可以绘制除了拟合曲线之外所有内容的颜色。

(9)vertical:布尔值,可选参数。如果为True,则观测值在y轴显示。

(10)norm_hist:布尔值,可选参数。如果为True,则直方图的高度显示密度而不是计数。如果绘制KDE图或拟合密度,则默认为True。

(11)axlabel:字符串,False或者None,可选参数。横轴的名称。如果为None,将尝试从a.name获取它;如果为False,则不设置标签。

(12)label:字符串,可选参数。图形相关组成部分的图例标签。

通过 distplot())函数绘制直方图的示例如下。

import numpy as np
import matplotlib.pyplot as plt
import seaborn as sns

sns.set()
np.random.seed(0)  # 确定随机数生成器的种子,如果不使用每次生成图形不一样
arr = np.random.randn(100)  # 生成随机数组

sns.distplot(arr, bins=10, hist=True, kde=True, rug=True)  # 绘制直方图
plt.show()


上述示例中,首先导入了用于生成数组的numpy库,然后使用 seaborn调用set()函数获取默认绘图,

并且调用 random模块的seed函数确定随机数生成器的种子,保证每次产生的随机数是一样的,

接着调用 randn()函数生成包含100个随机数的数组,最后调用 distplot()函数绘制直方图。


从上图中看出:


直方图共有10个条柱,每个条柱的颜色为蓝色,并且有核密度估计曲线。

根据条柱的高度可知,位于-1-1区间的随机数值偏多,小于-2的随机数值偏少。

通常,采用直方图可以比较直观地展现样本数据的分布情况,不过,直方图存在一些问题,它会因为条柱数量的不同导致直方图的效果有很大的差异。

为了解决这个问题,可以绘制核密度估计曲线进行展现。


核密度估计是在概率论中用来估计未知的密度函数,属于非参数检验方法之一,可以比较直观地看出数据样本本身的分布特征。

通过 distplot()函数绘制核密度估计曲线的示例如下。

#创建包含500个位于[0,100]之间整数的随机数组

array_random = np.random.randint(0, 100, 500)

#绘制核密度估计曲线

sns.distplot(array_random, hist=False, rug=True)

上述示例中,首先通过 random.randint()函数返回一个最小值不低于0、最大值低于100的500个随机整数数组然后调用 displot()函数绘制核密度估计曲线。


从上图中看出,图表中有一条核密度估计曲线,并且在x轴的上方生成了观测数值的小细条。

3 绘制双变量分布


两个变量的二元分布可视化也很有用。在 Seaborn中最简单的方法是使用 jointplot()函数,该函数可以创建一个多面板图形,比如散点图、二维直方图、核密度估计等,以显示两个变量之间的双变量关系及每个变量在单坐标轴上的单变量分布。


jointplot()函数的语法格式如下。

seaborn.jointplot(x, y, data=None,
kind=‘scatter’, stat_func=None, color=None,
ratio=5, space=0.2, dropna=True)

参数:

x,y,hue:数据字段变量名(如上表,date,name,age,sex为数据字段变量名)

data: DataFrame

kind:{“scatter”| “reg”| “resid”| “kde”| “hex”}

作用:指定要绘制的类型,默认scatter。


color : matplotlib color 颜色


height : 数字

作用:指定图的大小(图是正方形的)


ratio:数字

作用:指定主轴(x,y轴)与边缘轴(正方形四边除x,y轴外的其它轴)高度的比率。 中心图与侧边图的比例。该参数的值越大,则中心图的占比会越大。


space:数字

作用:指定主轴与边缘轴之间的空间,用于设置中心图与侧边图的间隔大小。


dropna : bool

作用:如果为True,则删除x和y中缺少的观测值


下面以散点图、二维直方图、核密度估计曲线为例,为大家介绍如何使用 Seaborn绘制这些图形

3.1 绘制散点图

调用 seaborn.jointplot()函数绘制散点图的示例如下。

import numpy as np
import pandas as pd
import seaborn as sns

# 创建DataFrame对象
dataframe_obj = pd.DataFrame({"x": np.random.randn(500),"y": np.random.randn(500)})
# 绘制散布图
sns.jointplot(x="x", y="y", data=dataframe_obj) #此时引号里面的x,y必须与dataframe里面的列索引对应


上述示例中,首先创建了一个 DataFrame对象 dataframe_obj作为散点图的数据,其中x轴和y轴的数据均为500个随机数,接着调用 jointplot0函数绘制一个散点图,散点图x轴的名称为“x”,y轴的名称为“y”。


运行结果如图所示。

3.2 固定生成随机数

np.random.seed()

一、功能

np.random.seed(n)函数用于生成指定随机数。


二、参数

把seed()中的参数比喻成“堆”;eg. seed(5):表示第5堆种子。


三、代码实例

seed()中的参数被设置了之后,np.random.seed()可以按顺序产生一组固定的数组,如果使用相同的seed()值,则每次生成的随机数都相同。如果不设置这个值,那么每次生成的随机数不同。但是,只在调用的时候seed()一下并不能使生成的随机数相同,需要每次调用都seed()一下,表示种子相同,从而生成的随机数相同。

例1(只调用一次seed(),两次的产生随机数不同)

import numpy as np
np.random.seed(1)

L1 = np.random.randn(3, 3)
L2 = np.random.randn(3, 3)
print(L1)
print()
print(L2)

例2(调用两次seed(),两次的产生随机数相同)

import numpy as np

np.random.seed(1)
L1 = np.random.randn(3, 3)
np.random.seed(1)
L2 = np.random.randn(3, 3)
print(L1)
print()
print(L2)


四、总结

从每堆种子里选出来的数都是不会变的,从不同的堆里选随机种子每次都不一样,若想每次都能得到相同的随机数,每次产生随机数之前,都需要调用一次seed()。


3.3 绘制二维直方图

二维直方图类似于“六边形”图,主要是因为它显示了落在六角形区域内的观察值的计数,适用于较大的数据集。当调用 jointplot()函数时,只要传入kind=“hex”,就可以绘制二维直方图,具体示例代码如下。


#绘制二维直方图

sns.jointplot(x=“x”, y=“y”, data=dataframe_obj, kind=“hex”)



**从六边形颜色的深浅,可以观察到数据密集的程度,**另外,图形的上方和右侧仍然给出了直方图。注意,在绘制二维直方图时,最好使用白色背景。

3.4 绘制核密度估计图形

利用核密度估计同样可以查看二元分布,其用等高线图来表示。当调用jointplot()函数时只要传入ind=“kde”,就可以绘制核密度估计图形,具体示例代码如下。

sns.jointplot(x=“x”, y=“y”, data=dataframe_obj, kind=“kde”)



上述示例中,绘制了核密度的等高线图,另外,在图形的上方和右侧给出了核密度曲线图。

通过观等高线的颜色深浅,可以看出哪个范围的数值分布的最多,哪个范围的数值分布的最少

4 绘制成对的双变量分布


要想在数据集中绘制多个成对的双变量分布,则可以使用pairplot()函数实现,该函数会创建一个坐标轴矩阵,并且显示Datafram对象中每对变量的关系。另外,pairplot()函数也可以绘制每个变量在对角轴上的单变量分布。


接下来,通过 sns.pairplot()函数绘制数据集变量间关系的图形,示例代码如下

加载seaborn中的数据集,需要科学上网

dataset = sns.load_dataset(“iris”)

dataset.head()

上述示例中,通过 load_dataset0函数加载了seaborn中内置的数据集,根据iris数据集绘制多个双变量分布。

#绘制多个成对的双变量分布

sns.pairplot(dataset)



相关文章
|
2天前
|
JavaScript 前端开发 Android开发
【03】仿站技术之python技术,看完学会再也不用去购买收费工具了-修改整体页面做好安卓下载发给客户-并且开始提交网站公安备案-作为APP下载落地页文娱产品一定要备案-包括安卓android下载(简单)-ios苹果plist下载(稍微麻烦一丢丢)-优雅草卓伊凡
【03】仿站技术之python技术,看完学会再也不用去购买收费工具了-修改整体页面做好安卓下载发给客户-并且开始提交网站公安备案-作为APP下载落地页文娱产品一定要备案-包括安卓android下载(简单)-ios苹果plist下载(稍微麻烦一丢丢)-优雅草卓伊凡
34 13
【03】仿站技术之python技术,看完学会再也不用去购买收费工具了-修改整体页面做好安卓下载发给客户-并且开始提交网站公安备案-作为APP下载落地页文娱产品一定要备案-包括安卓android下载(简单)-ios苹果plist下载(稍微麻烦一丢丢)-优雅草卓伊凡
|
1月前
|
测试技术 数据库 Python
Python装饰器实战:打造高效性能计时工具
在数据分析中,处理大规模数据时,分析代码性能至关重要。本文介绍如何使用Python装饰器实现性能计时工具,在不改变现有代码的基础上,方便快速地测试函数执行时间。该方法具有侵入性小、复用性强、灵活度高等优点,有助于快速发现性能瓶颈并优化代码。通过设置循环次数参数,可以更准确地评估函数的平均执行时间,提升开发效率。
106 61
Python装饰器实战:打造高效性能计时工具
|
4天前
|
JavaScript 搜索推荐 Android开发
【01】仿站技术之python技术,看完学会再也不用去购买收费工具了-用python扒一个app下载落地页-包括安卓android下载(简单)-ios苹果plist下载(稍微麻烦一丢丢)-客户的麻将软件需要下载落地页并且要做搜索引擎推广-本文用python语言快速开发爬取落地页下载-优雅草卓伊凡
【01】仿站技术之python技术,看完学会再也不用去购买收费工具了-用python扒一个app下载落地页-包括安卓android下载(简单)-ios苹果plist下载(稍微麻烦一丢丢)-客户的麻将软件需要下载落地页并且要做搜索引擎推广-本文用python语言快速开发爬取落地页下载-优雅草卓伊凡
23 8
【01】仿站技术之python技术,看完学会再也不用去购买收费工具了-用python扒一个app下载落地页-包括安卓android下载(简单)-ios苹果plist下载(稍微麻烦一丢丢)-客户的麻将软件需要下载落地页并且要做搜索引擎推广-本文用python语言快速开发爬取落地页下载-优雅草卓伊凡
|
4天前
|
数据采集 JavaScript Android开发
【02】仿站技术之python技术,看完学会再也不用去购买收费工具了-本次找了小影-感觉页面很好看-本次是爬取vue需要用到Puppeteer库用node.js扒一个app下载落地页-包括安卓android下载(简单)-ios苹果plist下载(稍微麻烦一丢丢)-优雅草卓伊凡
【02】仿站技术之python技术,看完学会再也不用去购买收费工具了-本次找了小影-感觉页面很好看-本次是爬取vue需要用到Puppeteer库用node.js扒一个app下载落地页-包括安卓android下载(简单)-ios苹果plist下载(稍微麻烦一丢丢)-优雅草卓伊凡
29 7
【02】仿站技术之python技术,看完学会再也不用去购买收费工具了-本次找了小影-感觉页面很好看-本次是爬取vue需要用到Puppeteer库用node.js扒一个app下载落地页-包括安卓android下载(简单)-ios苹果plist下载(稍微麻烦一丢丢)-优雅草卓伊凡
|
1月前
|
数据可视化 算法 数据挖掘
Python时间序列分析工具Aeon使用指南
**Aeon** 是一个遵循 scikit-learn API 风格的开源 Python 库,专注于时间序列处理。它提供了分类、回归、聚类、预测建模和数据预处理等功能模块,支持多种算法和自定义距离度量。Aeon 活跃开发并持续更新至2024年,与 pandas 1.4.0 版本兼容,内置可视化工具,适合数据探索和基础分析任务。尽管在高级功能和性能优化方面有提升空间,但其简洁的 API 和完整的基础功能使其成为时间序列分析的有效工具。
80 37
Python时间序列分析工具Aeon使用指南
|
1月前
|
存储 算法 Serverless
剖析文件共享工具背后的Python哈希表算法奥秘
在数字化时代,文件共享工具不可或缺。哈希表算法通过将文件名或哈希值映射到存储位置,实现快速检索与高效管理。Python中的哈希表可用于创建简易文件索引,支持快速插入和查找文件路径。哈希表不仅提升了文件定位速度,还优化了存储管理和多节点数据一致性,确保文件共享工具高效运行,满足多用户并发需求,推动文件共享领域向更高效、便捷的方向发展。
|
2月前
|
数据可视化 DataX Python
Seaborn 教程-绘图函数
Seaborn 教程-绘图函数
87 8
|
数据可视化 数据挖掘 Python
Python实践:seaborn的散点图矩阵(Pairs Plots)可视化数据
如何快速创建强大的可视化探索性数据分析,这对于现在的商业社会来说,变得至关重要。今天我们就来,谈一谈如何使用python来进行数据的可视化!
15900 0
|
2月前
|
人工智能 数据可视化 数据挖掘
探索Python编程:从基础到高级
在这篇文章中,我们将一起深入探索Python编程的世界。无论你是初学者还是有经验的程序员,都可以从中获得新的知识和技能。我们将从Python的基础语法开始,然后逐步过渡到更复杂的主题,如面向对象编程、异常处理和模块使用。最后,我们将通过一些实际的代码示例,来展示如何应用这些知识解决实际问题。让我们一起开启Python编程的旅程吧!
|
2月前
|
存储 数据采集 人工智能
Python编程入门:从零基础到实战应用
本文是一篇面向初学者的Python编程教程,旨在帮助读者从零开始学习Python编程语言。文章首先介绍了Python的基本概念和特点,然后通过一个简单的例子展示了如何编写Python代码。接下来,文章详细介绍了Python的数据类型、变量、运算符、控制结构、函数等基本语法知识。最后,文章通过一个实战项目——制作一个简单的计算器程序,帮助读者巩固所学知识并提高编程技能。

热门文章

最新文章

推荐镜像

更多