python数据分析——seaborn绘图2

参考资料:活用pandas库

python 复制代码
# 导入库
import pandas as pd
import matplotlib.pyplot as plt
import seaborn as sns
tips=pd.read_csv(r"...\seaborn常用数据案例\tips.csv")
print(tips.head())

1、成对关系表示

当数据大部分是数据时,可以使用pairplot函数把所有成对关系描绘出来,该函数会为每对变量绘制散点图,并且为单变量数据绘制直方图。

python 复制代码
fig=sns.pairplot(tips)

pairplot的一个缺点就是存在冗余信息,即图的上半部分和下半部分相同。可以使用pairgrid手动指定图的上半部分和下半部分。如下:

python 复制代码
pair_grid=sns.PairGrid(tips)
# 可以使用plt.scatter代替sns.regplot
pair_grid=pair_grid.map_upper(sns.regplot)
pair_grid=pair_grid.map_lower(sns.kdeplot)
pair_grid=pair_grid.map_diag(sns.histplot,kde=True)

2、多变量数据的可视化

(1)颜色

使用violinplot函数是,可以通过hue参数按性别(sex)给图着色。可以为"小提琴"的左右两半着不同颜色,用于区分性别,以此减少冗余信息。

python 复制代码
fig,ax=plt.subplots()
ax=sns.violinplot(x='time',y='total_bill',hue='sex',data=tips,split=True)

其他绘图函数也存在hue参数,如lmplot函数,pairplot函数。

python 复制代码
sns.lmplot(x='total_bill',y='tip',data=tips,hue='sex',fit_reg=False)
python 复制代码
sns.pairplot(tips,hue='sex')

(2)大小和形状

我们还可以通过点的大小表示更多的信息,但应该谨慎使用该方法,因为人眼不太擅长区分点的大小。

python 复制代码
sns.lmplot(x='total_bill',y='tip',data=tips,fit_reg=False,
           scatter_kws={'s':tips['size']*10})

另外,在处理多个变量时,有时综合运用不同元素显示信息会非常有用。下例中,运用了颜色和形状区分变量sex的值。

python 复制代码
sns.lmplot(x='total_bill',y='tip',data=tips,
          fit_reg=False,
          hue='sex',
          markers=['o','x'])

(3)分面

如果想显示更多变量,或者确定了要实现的可视化图,但向基于一个分类变量画出多幅图,可以使用分面(facet)来满足这些需求。要使用分面,数据必须是"整洁数据":数据中的每一行都表示一个观测值,每一列是一个变量(也是"长数据")。

如下图所示在lmplot创建这个可视化,需要将另外两个参数col和col_wrap传递到seaborn中的散点图中。col参数用于指定分面变量,col_wrap参数用于指定图的每行包含的具体列数。如果不适用col_wrap参数,所有图将会在同一行中。

python 复制代码
# 导入数据
anscombe=pd.read_csv(r"...\seaborn常用数据案例\anscombe.csv")
# 查看数据
anscombe.sample(10)
# 可视化分面
sns.lmplot(x='x',y='y',data=anscombe,fit_reg=False,
          col='dataset',col_wrap=2)

我们知道lmplot是图级(figure-level)函数,而在seaborn中,许多图使用轴域级(axes-level)函数创建的。这意味着并不是每个绘图函数都有分面参数col和col_wrap。为此必须先创建FacetGrid,它知道要在哪个变量上进行分面,然后为每个分面提供单独的绘图代码。如下:

python 复制代码
# 创建FacetGrid
facet=sns.FacetGrid(tips,col='time')
# 针对每个用餐时段,绘制总消费额的直方图
facet.map(sns.histplot,'total_bill',kde=True)

各个分面不限于单变量图,如下:

python 复制代码
facet=sns.FacetGrid(tips,col='day',col_wrap=2,hue='sex')
facet=facet.map(plt.scatter,'total_bill','tip')
facet.add_legend()

对于分面,还可以让一个变量在x轴上分面,另一个变量在y轴上分面,可以通过传递row参数来实现,如下:

python 复制代码
facet=sns.FacetGrid(tips,col='time',row='smoker',hue='sex')
facet.map(plt.scatter,'total_bill','tip')
相关推荐
小小张说故事6 分钟前
Python 中 __new__ 和 __init__ 到底谁才是构造函数?一文讲透区别与 5 个坑
后端·python
言乐614 分钟前
Python实现关税自动计算模型
开发语言·python·django·virtualenv·pygame
伞伞悦读15 分钟前
从零打通 Hermes Agent:Windows + WSL2 + Clash 全链路安装、认证与首次实战
python·语言模型
朝朝辞暮i15 分钟前
C++ 第 14 课:引用 &
开发语言·c++·算法
happylifetree33 分钟前
Python17:核心语法-数据存储与运算-输入与输出
python
梅雅达编程笔记43 分钟前
04-Python CSV数据保存与翻页抓取
开发语言·爬虫·python·pandas·数据采集·csv
C++ 老炮儿的技术栈1 小时前
有符号变量与无符号变量的区别
服务器·开发语言·前端·数据结构·c++·算法·c
估值探索者1 小时前
【Python量化策略实战 #04】Donchian 通道假突破太多?用 ATR 阈值过滤跑通真实突破信号
开发语言·python·接口·api接口·数据api接口·股票数据api接口
个 人 练 习 生1 小时前
C++:模板初阶详解
开发语言·c++·经验分享·学习
知识分享小能手1 小时前
C++ 学习教程,从入门到精通,C++类继承 — 完整知识点详解(13)
开发语言·c++·学习