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')
相关推荐
华科云商xiao徐1 天前
告别IP被封!分布式爬虫的“隐身”与“分身”术
爬虫·数据挖掘·数据分析
mahuifa1 天前
OpenCV 开发 -- 图像基本处理
人工智能·python·opencv·计算机视觉
土了个豆子的1 天前
03.缓存池
开发语言·前端·缓存·visualstudio·c#
_extraordinary_1 天前
Java 多线程(一)
java·开发语言
爱喝水的鱼丶1 天前
SAP-ABAP: ABAP ASSIGN COMPONENT 语句详解:动态字段符号的利器作用用法示例详解
运维·开发语言·sap·abap·开发经验·动态字段符号
一个java开发1 天前
distributed.client.Client 用户可调用函数分析
大数据·python
励志不掉头发的内向程序员1 天前
C++进阶——多态
开发语言·c++·学习
eqwaak01 天前
Matplotlib 动态显示详解:技术深度与创新思考
网络·python·网络协议·tcp/ip·语言模型·matplotlib
毕设源码-郭学长1 天前
【开题答辩全过程】以电商数据可视化系统为例,包含答辩的问题和答案
信息可视化
007php0071 天前
某大厂MySQL面试之SQL注入触点发现与SQLMap测试
数据库·python·sql·mysql·面试·职场和发展·golang