散点图在分类变量中不能使用,本章将讨论分类变量的显示方法。seaborn将分类变量的显示函数分成了三类:每个级别分类变量的观察,观察变量的抽象表示,统计估计表示。
- 第一类使用函数swarmplot和stripplot
- 第二类使用boxplot和violinplot
- 第三类使用countplot和pointplot
分类变量的关联也有两种显示方式:
- regplot和lmplot 的低级关联显示方式
- factorplot和FacetGrid 高级关联显示方式
首先导入库和数据
import numpy as np
import pandas as pd
import matplotlib as mpl
import matplotlib.pyplot as plt
import seaborn as sns
sns.set(style="whitegrid", color_codes=True)
np.random.seed(sum(map(ord, "categorical")))
titanic = sns.load_dataset("titanic")
tips = sns.load_dataset("tips")
iris = sns.load_dataset("iris")
分类变量散点图
显示分类变量的散点图,最简单的函数是stripplot
sns.stripplot(x="day", y="total_bill", data=tips);
我们发现每个分类中点都重合了,有点看不清楚,可以使用jitter来调整一下偏差
sns.stripplot(x="day", y="total_bill", data=tips, jitter=True);
虽然散开了,但是由于比较密集,依然有重叠。swarmplot使用专用算法保证不重叠。
sns.swarmplot(x='day', y='total_bill', data=tips)
点不拥堵在一起了,开枝散叶了,这时我么还可以加入另一个分类
sns.swarmplot(x='day', y='total_bill', hue='sex', data=tips)
分类变量分布图
一般来说散点图提供的信息有限,有时候我们需要分类变量的分布图,提供不同分类之间总体信息的比较。
箱线图
箱线图给出了4分位的值,极值,中位数等信息,较好的描述了离散变量的信息
sns.boxplot(x='day', y='total_bill', data=tips)
琴音图
有时候我们需要核密度分布图,violinplot是个选择
sns.violinplot(x='day', y='total_bill', hue='sex', data=tips, split=True)
swarmplot,violinplot,boxplot,stripplot个和函数可以混合使用
sns.violinplot(x="day", y="total_bill", data=tips, inner=None)
sns.swarmplot(x="day", y="total_bill", data=tips, color="w", alpha=.5);
分类变量的统计估计
除了显示分布,还可以显示中心趋势,seaborn有两个基本的API,barplot,countplot
sns.barplot(x="sex", y="survived", hue="class", data=titanic)
sns.countplot(x="deck", data=titanic, palette="Greens_d");
多面板的分类变量图
两种方法添加面板 factorplot或者|FacetGrid
sns.factorplot(x="day", y="total_bill", hue="smoker",
col="time", data=tips, kind="swarm");
sns.factorplot(x="time", y="total_bill", hue="smoker",
col="day", data=tips, kind="box", size=4, aspect=.5);
g = sns.PairGrid(tips,
x_vars=["smoker", "time", "sex"],
y_vars=["total_bill", "tip"],
aspect=.75, size=3.5)
g.map(sns.violinplot, palette="pastel");