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')
相关推荐
知白守黑26712 分钟前
docker网络
开发语言·php
细节控菜鸡15 分钟前
【2025最新】ArcGIS for JS 范围裁剪(只保留特定区域显示),实现精准地理范围聚焦
开发语言·javascript·arcgis
CodeCraft Studio22 分钟前
Excel处理控件Aspose.Cells教程:使用 Python 将 HTML 转换为 Excel
python·html·excel·aspose·aspose.cells·html转excel
一根甜苦瓜30 分钟前
Go语言Slice的一道骚题
开发语言·后端·golang
驰羽37 分钟前
[GO]Go语言泛型详解
开发语言·golang·xcode
NPE~37 分钟前
[手写系列]Go手写db — — 第五版(实现数据库操作模块)
开发语言·数据库·后端·golang·教程·手写系列·手写数据库
润 下39 分钟前
C语言——深入解析C语言指针:从基础到实践从入门到精通(二)
c语言·开发语言·经验分享·笔记·学习·程序人生
王中阳Go1 小时前
Python 的 PyPy 能追上 Go 的性能吗?
后端·python·go
Goboy1 小时前
控制仙术流程 - 抉择与循环的艺术
后端·python
布伦鸽1 小时前
C# WPF DataGrid使用Observable<Observable<object>类型作为数据源
开发语言·c#·wpf