【数据操作与可视化】Serborn绘图-单变量分布

【数据操作与可视化】Serborn绘图-单变量分布

一、简单入门

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

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

使用前安装和导入:

python 复制代码
# 安装 
pip3 install seaborn
# 导入
import seaborn as sns
# 画一张图
import seaborn as sns
import matplotlib.pyplot as plt
sns.lineplot(x=[1,2,3],y=[2,4,6])
plt.show()
​

二、绘制单变量分布

可以采用最简单的直方图描述单变量的分布情况。 Seaborn中提供了 distplot()函数,它默认绘制的是一个带有核密度估计曲线的直方图。 distplot()函数的语法格式如下。

python 复制代码
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。

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

python 复制代码
import numpy as np
import seaborn as sns
import matplotlib.pyplot as plt
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()函数绘制核密度估计曲线的示例如下。

ini 复制代码
# 创建包含500个位于[0,100]之间整数的随机数组
array_random = np.random.randint(0, 100, 500)
# 绘制核密度估计曲线
sns.distplot(array_random, hist=False, rug=True)
plt.show()

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

运行结果如图所示。

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

相关推荐
真智AI14 小时前
用 FAISS 搭个轻量 RAG 问答(Python)
开发语言·python·faiss
2401_8576835414 小时前
使用Kivy开发跨平台的移动应用
jvm·数据库·python
咩咩不吃草14 小时前
【HTML】核心标签与【Python爬虫库】实战指南
css·爬虫·python·html
serve the people14 小时前
python环境搭建 (七) pytest、pytest-asyncio、pytest-cov 试生态的核心组合
开发语言·python·pytest
java1234_小锋14 小时前
分享一套不错的基于Python的Django宠物信息管理系统
开发语言·python·宠物
2401_8414956414 小时前
【Web开发】基于Flask搭建简单的应用网站
后端·python·flask·视图函数·应用实例·路由装饰器·调试模式
木卫二号Coding15 小时前
第七十七篇-V100+llama-cpp-python-server+Qwen3-30B+GGUF
开发语言·python·llama
木卫二号Coding15 小时前
第七十六篇-V100+llama-cpp-python+Qwen3-30B+GGUF
开发语言·python·llama
-To be number.wan15 小时前
为什么 pyecharts 在 Jupyter Notebook 里显示空白?
ide·python·jupyter·数据分析
zhang61839915 小时前
Linux中不同服务器之间迁移python 虚拟环境-conda-pack
linux·运维·python