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')
相关推荐
一路向北North1 小时前
Java使用replaceAll替换时不使用正则表达式
java·开发语言·正则表达式
yangfeipancc2 小时前
正则表达式
java·开发语言·正则表达式
伊织code3 小时前
CSDN 博客自动发布脚本(Python 含自动登录、定时发布)
python·博客·登录·csdn·自动发布·定时
Cosmoshhhyyy4 小时前
Jackson库中JsonInclude的使用
java·开发语言
007php0074 小时前
GoZero对接GPT接口的设计与实现:问题分析与解决
java·开发语言·python·gpt·golang·github·企业微信
breakthrough_014 小时前
创建一个简单的 Nuxt.js 应用
开发语言·javascript·ecmascript
思忖小下5 小时前
Python基础学习-11函数参数
python·语法
Jason-河山5 小时前
利用Java爬虫获得店铺详情:技术解析
java·开发语言·爬虫
就是有点傻6 小时前
C#中面试的常见问题005
开发语言·面试·c#·wpf
封步宇AIGC6 小时前
量化交易系统开发-实时行情自动化交易-4.4.1.做市策略实现
人工智能·python·机器学习·数据挖掘