可视化分类数据

可视化分类数据的统一FacetGrid图级接口为catplot()函数,通过kind参数,可以选择轴级函数有:

  • 分类散点图:
    • stripplot() (with kind=“strip”; the default)
    • swarmplot() (with kind=“swarm”)
  • 分类分布图:
    • boxplot() (with kind=“box”)
    • violinplot() (with kind=“violin”)
    • boxenplot() (with kind=“boxen”)
  • 分类估计图:
    • pointplot() (with kind=“point”)
    • barplot() (with kind=“bar”)
    • countplot() (with kind=“count”)

条形图

绘制两种不同的条形图:

  • barplot() 或 catplot(kind=‘bar’):x为分类,y为该分类下的数据的估计值;需要给x、y赋值。
  • countplot() 或 catplot(kind=‘count’):x为分类,y为该分类下的数据的数量;只需给x赋值。

两种图形的其他参数使用方法一致。

1
2
3
4
5
6
7
8
import seaborn as sns
import pandas as pd
%matplotlib inline

# 加载seaborn配制,覆盖matplotlib默认配制
sns.set()
tips = pd.read_csv('seaborn-data-master/tips.csv')
display(tips)
total_billtipsexsmokerdaytimesize
016.991.01FemaleNoSunDinner2
110.341.66MaleNoSunDinner3
221.013.50MaleNoSunDinner3
323.683.31MaleNoSunDinner2
424.593.61FemaleNoSunDinner4
........................
23929.035.92MaleNoSatDinner3
24027.182.00FemaleYesSatDinner2
24122.672.00MaleYesSatDinner2
24217.821.75MaleNoSatDinner2
24318.783.00FemaleNoThurDinner2

244 rows × 7 columns

1
2
# y为数据的估值的条形图
ax = sns.barplot(x='day', y='total_bill', data=tips)

1
2
# y为数据的数量的条形图
ax = sns.countplot(x='day', data=tips)

绘制每组有多个分类的条形图

hue通过颜色控制每组分类数量,同样适用于其他类型分类数据图。

1
ax = sns.barplot(x='day', y='total_bill', hue='sex', data=tips)

绘制水平条形图

通过交换x、y变量,同样适用于其他类型分类数据图。

1
ax = sns.barplot(y='day', x='total_bill', hue='sex', data=tips)

控制条形顺序

order参数传入列表,指定条形顺序,同样适用于其他类型分类数据图。

1
2
ax = sns.barplot(x='day', y='total_bill', 
                 order=['Sat', 'Thur', 'Fri', 'Sun'], data=tips)

不绘制误差条

ci参数控制估计值的置信区间大小,取值:

  • 浮点数
  • ‘sd’(标准差)
  • None,不绘制
1
2
ax = sns.barplot(x='day', y='total_bill', 
                 ci=None, data=tips)

分类散点图

可视化统计关系的散点图的x、y取值均为数值一一对应,而分类散点图x或y某一维表示分类(类别不能太多,否则绘出的图很大),另一维为每一类中分布的数值。

绘制两种不同的分类散点图:

  • stripplot() 或 catplot(kind=‘strip’):绘制的点元素可重叠;
  • swarmplot() 或 catplot(kind=‘swarm’):绘制的点元素不重叠;
1
2
3
# stripplot()绘制出的点有重叠

ax = sns.stripplot(x='day', y='total_bill', data=tips)

1
2
3
# swarmplot()绘制出的点不重叠

ax = sns.swarmplot(x='day', y='total_bill', data=tips)

线箱图

绘制方法:

  • catplot(kind=‘box’)
  • boxplot()
1
ax = sns.boxplot(x='day', y='total_bill', data=tips)

绘制嵌套分组的线箱图

hue控制每一类的分组,如果该类只有一个分组则至绘制一个线箱图,如下图。

1
ax = sns.boxplot(x='day', y='total_bill', hue='time', data=tips)