当前位置: 首页 > news >正文

python自学笔记9 Seaborn可视化

Seaborn:统计可视化利器

作为基于 Matplotlib 的高级绘图库,有一下功能:
在这里插入图片描述

一元特征数据

直方图

import matplotlib.pyplot as plt 
import pandas as pd  
import seaborn as sns # import os
# # 如果文件夹不存在,创建文件夹
# if not os.path.isdir("Figures"):
#     os.makedirs("Figures")# 导入鸢尾花数据
iris_sns = sns.load_dataset("iris") iris_sns# 绘制花萼长度样本数据直方图
fig, ax = plt.subplots(figsize = (8, 6))sns.histplot(data=iris_sns, x="sepal_length", binwidth=0.2, ax = ax)								# 纵轴三个选择:频率、概率、概率密度ax.axvline(x = iris_sns.sepal_length.mean(), color = 'r', ls = '--')								# 增加均值位置竖直参考线# 参考https://seaborn.pydata.org/tutorial/distributions.html

效果:
在这里插入图片描述
在这里插入图片描述
代码演示如下图所示:

# 绘制花萼长度样本数据直方图, 考虑鸢尾花分类
fig, ax = plt.subplots(figsize = (8,6))
sns.histplot(data = iris_sns, x="sepal_length",
hue = 'species', binwidth=0.2, ax = ax,
element="step", stat = 'density')
# 纵轴为概率密度

如果要分组的话使用如下代码:

fig, ax = plt.subplots(figsize=(8, 6))
sns.histplot(data=iris_sns,          # 数据源(DataFrame)x="sepal_length",       # 指定x轴为花萼长度hue='species',          # 按鸢尾花种类分组着色binwidth=0.2,           # 直方图条柱宽度为0.2ax=ax,                  # 指定绘图坐标轴element="step",         # 直方图样式为阶梯线stat='density'          # 纵轴显示密度而非计数
)

核密度估计KDE

将每个点变成一个高斯核函数(就是高斯分布的那个函数形式),然后再叠加
在这里插入图片描述

# 绘制花萼长度样本数据,高斯核密度估计
fig, ax = plt.subplots(figsize = (8,6))sns.kdeplot(data=iris_sns, x="sepal_length", 	# 生成核密度曲线bw_adjust=0.3, fill = True)			# 调整曲率,填充区域
sns.rugplot(data=iris_sns, x="sepal_length")	# 生产毛毯图(小刺)

效果:
在这里插入图片描述

# 绘制花萼长度样本数据,高斯核密度估计,考虑鸢尾花类别
fig, ax = plt.subplots(figsize = (8,6))sns.kdeplot(data=iris_sns, x="sepal_length", hue = 'species', # 各自的分布bw_adjust=0.5, fill = True)
sns.rugplot(data=iris_sns, x="sepal_length", hue = 'species')# fig.savefig('Figures\一元,kdeplot + rugplot + hue.svg', format='svg')

在这里插入图片描述

# 绘制花萼长度样本数据,高斯核密度估计,考虑鸢尾花类别,堆叠
fig, ax = plt.subplots(figsize = (8,6))sns.kdeplot(data=iris_sns, x="sepal_length", hue="species", multiple="stack", 		# 设置叠加属性bw_adjust=0.5)

效果:
在这里插入图片描述

# 绘制后验概率 (成员值)fig, ax = plt.subplots(figsize = (8,6))
sns.kdeplot(data=iris_sns, x="sepal_length", hue="species", bw_adjust=0.5,multiple = 'fill')			# 设置叠加效果

效果:
在这里插入图片描述

分散点图/蜂群图

在这里插入图片描述
较小的数据使用:seaborn.stripplot() 蜂群图
较大的数据使用:seaborn.swarmplot() 分散点图

# 绘制鸢尾花花萼长度分散点图
fig, ax = plt.subplots(figsize = (8,6))
sns.stripplot(data=iris_sns, x="sepal_length", y="species", hue="petal_length", palette="RdYlBu_r", ax = ax)

效果:
在这里插入图片描述

# 绘制花萼长度样本数据, 蜂群图
fig, ax = plt.subplots(figsize = (8,4))
sns.swarmplot(data=iris_sns, x="sepal_length", ax = ax)
# 绘制花萼长度样本数据, 蜂群图, 考虑分类
fig, ax = plt.subplots(figsize = (8,4))
sns.swarmplot(data=iris_sns, x="sepal_length", y = 'species',
hue = 'species', ax = ax)

箱型图

在这里插入图片描述
包含元素:
在这里插入图片描述

# 绘制鸢尾花花萼长度箱型图
fig, ax = plt.subplots(figsize = (8,2))
sns.boxplot(data=iris_sns, x="sepal_length", ax = ax)

效果:
在这里插入图片描述

# 绘制鸢尾花花萼长度箱型图,考虑鸢尾花分类
fig, ax = plt.subplots(figsize = (8,3))
sns.boxplot(data=iris_sns, x="sepal_length", y = 'species', ax = ax)

效果:
在这里插入图片描述

小提琴图

可以看成用核密度曲线优化的箱线图

# 绘制花萼长度样本数据,小提琴图
fig, ax = plt.subplots(figsize = (8,2))
sns.violinplot(data=iris_sns, x="sepal_length", ax = ax)

效果:
在这里插入图片描述

# 绘制花萼长度样本数据,小提琴图,考虑分类
fig, ax = plt.subplots(figsize = (8,4))
sns.violinplot(data=iris_sns, x="sepal_length", y="species", ax = ax)

在这里插入图片描述

sns.violinplot(data=iris_sns, x="sepal_length", y="species", inner = 'stick')

在这里插入图片描述

# 蜂群图 + 小提琴图,考虑鸢尾花分类sns.catplot(data=iris_sns, x="sepal_length", y="species", kind="violin", color=".9", inner=None)sns.swarmplot(data=iris_sns, x="sepal_length", y="species", size=3)

在这里插入图片描述

二元特征数据

散点图

通过散点图可以简要查看两个维度是否有何关系

# 鸢尾花散点图 + 毛毯图
fig, ax = plt.subplots(figsize = (4,4))sns.scatterplot(data=iris_sns, x="sepal_length", y="sepal_width")
sns.rugplot(data=iris_sns, x="sepal_length", y="sepal_width")

效果:
在这里插入图片描述

fig, ax = plt.subplots(figsize = (4,4))sns.scatterplot(data=iris_sns, x="sepal_length", y="sepal_width", hue = 'species')
sns.rugplot(data=iris_sns, x="sepal_length", y="sepal_width", hue = 'species')fig.savefig('Figures\二元,scatterplot + rugplot + hue.svg', format='svg')

效果:
在这里插入图片描述

二元直方热图

二维散点图转化为直方图后效果并不清晰
在这里插入图片描述
在这里插入图片描述
因此采用二维热力图:
在这里插入图片描述

# 鸢尾花二元频率直方热图sns.displot(data=iris_sns, x="sepal_length", y="sepal_width", binwidth=(0.2, 0.2), cbar=True)

在这里插入图片描述

联合分布 KDE

使用高斯核函数可以估算联合分布,这样的联合分布可以用等高线图表示。
在这里插入图片描述

# 联合分布概率密度等高线
sns.displot(data=iris_sns, x="sepal_length", y="sepal_width", kind="kde")

效果:
在这里插入图片描述

# 联合分布概率密度等高线,考虑分布
sns.kdeplot(data=iris_sns, x="sepal_length", y="sepal_width", hue = 'species')

在这里插入图片描述

联合分布+边缘分布

看图即可懂:
在这里插入图片描述

# 联合分布、边缘分布
sns.jointplot(data=iris_sns, x="sepal_length", y="sepal_width", kind = 'kde', fill = True)

这里仅放示范代码,其他代码查看附件。

线性回归

# 可视化线性回归关系
sns.lmplot(data=iris_sns, x="sepal_length", y="sepal_width")

效果:
在这里插入图片描述

多元特征数据

可以用一元可视化方案展现多元特诊
首先将宽格式转化为长格式。
原来的宽格式:
在这里插入图片描述

iris_melt = pd.melt(iris_sns, "species", var_name="measurement")
iris_melt

通过代码结果可以查看长数据:
在这里插入图片描述

聚类热图

# 聚类热图
sns.clustermap(iris_sns.iloc[:,:-1], cmap = 'RdYlBu_r', vmin = 0, vmax = 8)

在这里插入图片描述

成对特征散点图

sns.pairplot(iris_sns)

在这里插入图片描述

# 绘制成对特征散点图
sns.pairplot(iris_sns, hue = 'species')

效果:
在这里插入图片描述

平行坐标图


from pandas.plotting import parallel_coordinates
# 可视化函数来自pandas
parallel_coordinates(iris_sns, 'species', colormap=plt.get_cmap("Set2"))
plt.show()

在这里插入图片描述

http://www.lryc.cn/news/622412.html

相关文章:

  • 47.分布式事务理论
  • Elasticsearch:使用 Gradio 来创建一个简单的 RAG 应用界面
  • LeetCode刷题记录----236.二叉树的最近公共节点(medium)
  • 终极手撸cpu系列-详解底层原理-CPU硬核解剖:从0和1到 看透CPU逻辑设计内部原理,弄清楚现代多线程cpu工作原理
  • IC(Integrated Circuit,集成电路)是什么?
  • Qt——常用Widget(控件)
  • 数据结构初阶(17)排序算法——非比较排序、排序算法总结
  • Git、JSON、MQTT
  • 【Javaweb学习|黑马笔记|Day1】初识,入门网页,HTML-CSS|常见的标签和样式|标题排版和样式、正文排版和样式
  • 混凝土抗压强度预测:基于机器学习的全流程实战解析​
  • flume实战:从零配置到启动运行的完整指南
  • 【嵌入式C语言】五
  • 模型输出参数和量化参数一文详解!!
  • Eclipse:关闭项目
  • 腾讯位置商业授权微信小程序逆地址解析(坐标位置描述)
  • 【LeetCode 热题 100】121. 买卖股票的最佳时机
  • OpenZeppelin Contracts 架构分层分析
  • 再回C的进制转换--负数
  • python的美食交流社区系统
  • 【Spring Cloud 微服务】1.Hystrix断路器
  • 两幅美国国旗版权挂钩专利发起跨境诉讼
  • 列式存储与行式存储:核心区别、优缺点及代表数据库
  • Spring Boot 静态函数无法自动注入 Bean?深入解析与解决方案
  • 上下文块嵌入(contextualized-chunk-embeddings)
  • Mybatis简单练习注解sql和配置文件sql+注解形式加载+配置文件加载
  • 图像识别控制技术(Sikuli)深度解析:原理、应用与商业化前景
  • System V通信机制
  • Web攻防-大模型应用LLM安全提示词注入不安全输出代码注入直接间接数据投毒
  • Go语言 time 包详解:从基础到实战
  • Vue模板引用(Template Refs)全解析1