seaborn基础

Seaborn基础

seaborn 是数据可视化中一个很重要的库。Seaborn是基于matplotlib的图形可视化python包。它提供了一种高度交互式界面,便于用户能够做出各种有吸引力的统计图表。

Seaborn是在matplotlib的基础上进行了更高级的API封装,从而使得作图更加容易,在大多数情况下使用seaborn能做出很具有吸引力的图,而使用matplotlib就能制作具有更多特色的图。应该把Seaborn视为matplotlib的补充,而不是替代物。同时它能高度兼容numpy与pandas数据结构以及scipy与statsmodels等统计模式。

seaborn图标的背景:style must be one of white, dark, whitegrid, darkgrid, ticks

依次是:ticks,dark,white,darkgrid 和 whitegrid

设置色系palettes:http://seaborn.pydata.org/api.html#color-palettes

Relational plots

Relplot中的scatterplot

学习自博客:https://blog.csdn.net/u013317445/article/details/88175366

Relplot就是关系图,

  • sns.replot(kind=“scatter”),相当于scatterplot() 用来绘制散点图
  • sns.replot(kind=“line”),相当于lineplot() 用来绘制曲线图

本例中,我们的数据集采用库自带的小费数据集tips。
tips小费数据集:
是一个餐厅服务员收集的小费数据集,包含了7个变量:
总账单、小费、顾客性别、是否吸烟、日期、吃饭时间、顾客人数

1
2
3
4
5
6
7
8
import pandas as pd
import numpy as np
import seaborn as sns
import matplotlib.pyplot as plt
%matplotlib inline

tips = sns.load_dataset('tips')
tips.head()
total_bill tip sex smoker day time size
0 16.99 1.01 Female No Sun Dinner 2
1 10.34 1.66 Male No Sun Dinner 3
2 21.01 3.50 Male No Sun Dinner 3
3 23.68 3.31 Male No Sun Dinner 2
4 24.59 3.61 Female No Sun Dinner 4
1
2
3
4
5
6
7
8
9
tips.dtypestotal_bill     
float64
tip float64
sex category
smoker category
day category
time category
size int64
dtype: object
replot常用参数
x x轴
y y轴
hue 在某一维度上用颜色区分
style 在某一维度上, 用线的不同表现形式区分, 如 点线, 虚线等
size 控制数据点大小或者线条粗细
col 列上的子图
row 行上的子图
kind kind= ‘scatter’(默认值)
kind=’line’时候,可以通过参数ci:(confidence interval)参数,来控制阴影部分,如,ci=‘sd’ (一个x有多个y值)
也可以关闭数据聚合功能(urn off aggregation altogether), 设置estimator=None即可data
1
sns.relplot(x='total_bill', y='tip', data=tips)

参数 hue

hue
用不同的颜色区分出来
在smoker维度,smoker:取值有:No、Yes 蓝yes橙no

1
sns.relplot(x='total_bill', y='tip',  data=tips, hue='smoker')

图上有3个维度的信息:
total_bill(x)、tip(y)、smoker(不同颜色)

周末给的小费要比工作日更多一点

1
sns.relplot(x='total_bill', y='tip',  data=tips, hue='day')

同样的,我们把day改成dinner,seaborn会自动切换维度

看起晚饭时间给的小费要高一些

1
sns.relplot(x='total_bill', y='tip',  data=tips, hue='time')

hue+ hue_order

可以通过hue_order(一个list)来控制图例中hue的顺序。如果不设置的话,就会自动根据data来进行设定。
如果hue是数字型连续值,hue_order就没有什么关系了。

hue+palette

palette自定义颜色范围

1
sns.relplot(x='total_bill', y='tip',  data=tips, hue="day", palette="ch:r=-.5,l=.75")

参数style

style
不同的表示形状上区分
性别维度上,不同的性别, 原点:Male 叉叉:Female

1
sns.relplot(x='total_bill', y='tip',  data=tips, style='sex')

图上有3个维度的信息:
total_bill、tip、sex
x、y、不同形状

可以看出,给小费的男性多,男性给的小费高一点

我们把style设置成就餐人数

这样有六种形状

1
sns.relplot(x='total_bill', y='tip',  data=tips, style='size')

hue+style

当然我们可以同时规定hue和style,这样我们就增加了两个维度

吃晚饭的男性:蓝色+叉叉

吃晚饭的女性:蓝色+圈圈

吃中饭的男性:黄色+叉叉

吃中饭的女性:黄色+圈圈

1
sns.relplot(x='total_bill', y='tip',  data=tips, style='sex',hue='time')

图上有4个维度的信息:
total_bill、tip、sex、time
在晚饭时间,男人给的小费会多一点。

抽烟的女性:蓝色+叉叉
抽烟的男性:蓝色+原点
不抽烟的女性:橘色+叉叉
不抽烟的男性:橘色+原点

1
sns.relplot(x='total_bill', y='tip',  data=tips, hue='smoker', style='sex')

我们看出来愿意给高小费的男士基本都是不抽烟的男士

参数size

控制点的大小或者线条粗细
巧妙引入size维度(顾客人数)信息

1
2
3
4
5
6
7
sns.relplot(
x='total_bill',
y='tip',
data=tips,
hue='smoker',
style='sex',
size='size')

图上有5个维度的信息了

可以看出,人多消费大,消费大小费高 展示的信息量太多了,太丰富了,这个图反而太复杂而让我们不好解析它了

我们可以控制size的范围 如用size=(20,200)控制size的范围

1
sns.relplot(x='total_bill', y='tip', data=tips, size="size", sizes=(20, 200))

我们可以直接用value_counts()来计算各个size的个数

1
2
3
4
5
6
7
8
9
tips['size'].value_counts()

2 156
3 38
4 37
5 5
6 4
1 4
Name: size, dtype: int64

我们也可以更直观的看看餐厅中午饭和晚饭的消费情况

1
sns.relplot(x='total_bill', y='tip', data=tips, size="time", sizes=(20, 200))

1
2
3
4
5
tips['time'].value_counts()

Dinner 176
Lunch 68
Name: time, dtype: int64

看来这家餐厅午餐消费集中在30$之下

Relplot中的lineplot

我们采用的数据集是 fmri

1
2
fmri= sns.load_dataset("fmri")
fmri.head()
subject timepoint event region signal
0 s13 18 stim parietal -0.017552
1 s5 14 stim parietal -0.080883
2 s12 18 stim parietal -0.081033
3 s11 18 stim parietal -0.046134
4 s10 18 stim parietal -0.037970
1
2
3
4
5
6
7
fmri.dtypes
subject object
timepoint int64
event object
region object
signal float64
dtype: object

先用散点图看一下它的数据分布情况

1
sns.relplot(x="timepoint", y="signal", data=fmri)

kind=“line”

kind=“line” 就是lineplot()

那么散点图显然不是函数,因为一个x对应了多个y,那么seaborn是怎么把他们聚合的呢?默认取平均值

1
sns.relplot(x="timepoint", y="signal", data=fmri, kind="line")

ci=None 控制不显示聚合的阴影

1
sns.relplot(x="timepoint", y="signal", data=fmri, kind="line", ci=None)

ci 控制聚合的算法

ci(float):统计学上的置信区间(在0-100之间),若填写"sd",则误差棒用标准误差。(默认为95)

1
sns.relplot(x="timepoint", y="signal", data=fmri, kind="line", ci="sd")

关闭聚合:estimator= None

1
sns.relplot(x="timepoint", y="signal", data=fmri, kind="line",estimator=None)

hue:利用颜色区分

1
sns.relplot(x="timepoint", y="signal", data=fmri, kind="line",hue="event")

style:利用形状区分

1
sns.relplot(x="timepoint", y="signal", style="region", kind="line", data=fmri)

hue+ style

1
2
3
4
5
6
7
sns.relplot(
x="timepoint",
y="signal",
hue="event",
style="region",
kind="line",
data=fmri)

style结合dashes+markers

style结合dashes+markers可设置不同分类的标记样式

1
2
3
4
5
6
7
8
sns.relplot(x="timepoint", 
y="signal",
hue="event",
style="region",
kind="line",
dashes=False,
markers=True,
data=fmri)

units

当有多次的采样单位时,可以单独绘制每个采样单位,而无需通过语义区分它们。这可以避免使图例混乱

1
2
3
4
5
6
7
sns.relplot(kind="line",
data=fmri.query("event=='stim'"),
x="timepoint",
y="signal",
hue="region",
units="subject",
estimator=None)

lineplot色调和图例的处理还取决于hue是分类型数据or连续型数据

hue为连续型数值

1
2
dots= sns.load_dataset("dots").query("align== 'dots'")
dots
align choice time coherence firing_rate
0 dots T1 -80 0.0 33.189967
1 dots T1 -80 3.2 31.691726
2 dots T1 -80 6.4 34.279840
3 dots T1 -80 12.8 32.631874
4 dots T1 -80 25.6 35.060487
389 dots T2 680 3.2 37.806267
390 dots T2 700 0.0 43.464959
391 dots T2 700 3.2 38.994559
392 dots T2 720 0.0 41.987121
393 dots T2 720 3.2 41.716057
1
2
3
4
5
6
7
print(dots.dtypes)
align object
choice object
time int64
coherence float64
firing_rate float64
dtype: object

先来看看离散分布和聚合曲线:

相关性coherence是连续型数值
看看图例看看颜色:
颜色越重的相关性越强

1
2
3
4
5
6
sns.relplot(x="time",
y="firing_rate",
hue="coherence",
style="choice",
kind="line",
data=dots)

我们可以设置pallete属性,自定义color

主要,这里是6种颜色,n_colors一定要等于6,light值越高,线的对比度就越明显。我把它设置成0.3,就很难分辨了,设置成0就都成黑色了

1
2
3
4
5
6
7
8
9
pallete =  sns.cubehelix_palette(light=0.3,n_colors=6)
sns.relplot(x="time",
y="firing_rate",
hue="coherence",
style="choice",
kind="line",
palette=pallete,
data=dots)
plt.savefig('26')

设置了一下size,那么choice既有粗细之分了

1
2
3
4
5
6
7
8
sns.relplot(x="time",
y="firing_rate",
hue="coherence",
style="choice",
kind="line",
size="choice",
data=dots)
plt.savefig('27')

使用子图展示多重关系

参数col、row可以帮助我们实现。

col=“time” 有几种time,就有几列图(dinner和lunch)

1
sns.relplot(x='total_bill',y='tip',hue='smoker',col='time',data=tips)

col=’smoker’,hue=’smoker’

1
sns.relplot(x='total_bill',y='tip',hue='smoker',col='smoker',data=tips)

col=“sex” 有几种sex,就有几列图(2种male和female,2列图)

1
sns.relplot(x="total_bill", y="tip", col="sex", data=tips)

row=“smoker” 有几种smoker,就有几行图

1
sns.relplot(x="total_bill", y="tip", row="smoker", col="sex", data=tips)

令列是按照性别划分的,行是按照是否为烟民划分的,这就是一个2x2的图

1
sns.relplot(x="total_bill", y="tip", row="smoker", col="sex", data=tips)

令col=’tips’,row=’size’,可以分析出各个时间段来餐厅就餐的每桌人数和吸烟情况

1
sns.relplot(x='total_bill',y='tip',hue='smoker',col='time',data=tips,row='size')

col=“subject”, col_wrap=3 subject特别多,可以控制显示的图片的行数.col_wrap就代表有三列

1
2
3
4
5
6
7
8
sns.relplot(x="timepoint", y="signal",
hue="event", style="event",
col="subject", col_wrap=3,
data=fmri.query("region=='frontal'"),
kind="line",
linewidth=2.5,
aspect=1, #长宽比,该值越大图片越方
height=3)

lineplot() and scatterplot()

ci = 68 是统计偏差条的长度。err_style 是偏差条的形状,这里是bars所以是条形

1
2
3
4
5
6
7
8
sns.lineplot(x='timepoint',
y='signal',
style='event',
hue='region',
data=fmri,
markers=True,
ci=68,
err_style= 'bars')

1
2
3
4
5
6
7
sns.lineplot(x='timepoint',
y='signal',
hue='event',
data=fmri.query("region == 'frontal'"),
markers=True,
ci=68,
err_style= 'bars')

lw属性能让线条的明度更加亮一点

1
2
3
4
5
6
7
sns.lineplot(x='timepoint',
y='signal',
hue='event',
data=fmri.query("region == 'frontal'"),
estimator=None,
err_style= 'bars',
lw=1)

1
2
3
4
5
6
sns.scatterplot(x='total_bill',
y='tip',
data=tips,
hue='smoker',
size='size',
style='time')

Categorical plots

在关系图教程中,我们了解了如何使用不同的可视化表示来显示数据集中多个变量之间的关系。在这些例子中,我们关注的主要关系是两个数值变量之间的情况。如果其中一个主要变量是“分类”(分为不同的组),那么使用更专业的可视化方法可能会有所帮助。

下面所有函数的最高级别的整合接口

  • Categorical scatterplots:

    • stripplot() (with kind=“strip”; the default)
    • swarmplot() (with kind=“swarm”)
  • Categorical distribution plots:

    • boxplot() (with kind=“box”)
    • violinplot() (with kind=“violin”)
    • boxenplot() (with kind=“boxen”)
  • Categorical estimate plots:

    • pointplot() (with kind=“point”)
    • barplot() (with kind=“bar”)
    • countplot() (with kind=“count”)

分类散点图

catplot(kind=“strip”)

当在同一个类别中出现大量取值相同或接近的观测数据时,他们会挤到一起。seaborn中有两种分类散点图,分别以不同的方式处理了这个问题。
catplot()使用的默认方式是stripplot(),它给这些散点增加了一些随机的偏移量,更容易观察:

1
sns.catplot(x="day", y="total_bill", data=tips)

1
sns.catplot(x="total_bill", y="day", data=tips)

jitter参数控制着偏移量的大小,或者我们可以直接禁止他们偏移:

1
sns.catplot(x="day", y="tip", jitter=False,data=tips)

catplot(kind=“swarm”) 蜂群图

相当于swarmplot()
避免了散点之间的重合,提供更好的方式来呈现观测点的分布。
但仅适用于较小的数据集。

1
sns.catplot(kind="swarm", x="day", y="tip", data=tips)

hue参数:利用不同颜色区分

1
sns.catplot(kind="swarm", x="day", y="tip", hue="sex", data=tips)

1
sns.catplot(kind="swarm", x="day", y="total_bill", hue="size", data=tips)

关于x(分类型数据)轴的分类值的顺序,函数会自己推断。
如果数据是pandas的Categorical类型,那么默认的分类顺序可以在pandas中设置;
如果数据看起来是数值型的(比如1,2,3…),那他们也会被排序。
即使我们使用数字作为不同分类的标签,它们仍然是被当做分类型数据按顺序绘制在分类变量对应的坐标轴上的:

1
2
# 注意,2和4之间的距离与1和2之间的距离是一样的,它们是不同的分类,只会排序,但是并不会改变它们在坐标轴上的距离
sns.catplot(x="size", y="tip", kind="swarm", data=tips.query("size!=3"))

order参数:指定分类值顺序

1
2
3
4
5
6
7
sns.catplot(
kind="swarm",
x="size",
y="tip",
order=[6,5,4,3,2,1],
data=tips.query("size!=3")
)

1
2
3
4
5
6
sns.catplot(
kind="swarm",
x="smoker",
y="tip",
order=["No","Yes"],
data=tips)

有些时候把分类变量放在垂直坐标轴上会更有帮助(尤其是当分类名称较长或者分类较多时)

1
2
3
4
5
sns.catplot(x="total_bill", 
y="day",
hue="time",
kind="swarm",
data=tips)

分类分布图

catplot(kind=“box”) : 箱线图

https://www.cnblogs.com/zhhfan/p/11344310.html

又称为盒须图、盒式图或箱线图,是一种用作显示一组数据分散情况资料的统计图,因形状如箱子而得名。它能显示出一组数据的最大值、最小值、中位数、及上下四分位数。

箱形图绘制须使用常用的统计量,能提供有关数据位置和分散情况的关键信息,尤其在比较不同的母体数据时更可表现其差异。

箱形图的绘制主要包含六个数据节点,需要先将数据从大到小进行排列,然后分别计算出它的上边缘,上四分位数,中位数,下四分位数,下边缘,还有一个异常值。

计算过程:

  1. 计算上四分位数(Q3),中位数,下四分位数(Q1)
  2. 计算上四分位数和下四分位数之间的差值,即四分位数差(IQR, interquartile range)Q3-Q1
  3. 绘制箱线图的上下范围,上限为上四分位数,下限为下四分位数。在箱子内部中位数的位置绘制横线。
  4. 大于上四分位数1.5倍四分位数差的值,或者小于下四分位数1.5倍四分位数差的值,划为异常值(outliers)。
  5. 异常值之外,最靠近上边缘和下边缘的两个值处,画横线,作为箱线图的触须。
  6. 极端异常值,即超出四分位数差3倍距离的异常值,用实心点表示;较为温和的异常值,即处于1.5倍-3倍四分位数差之间的异常值,用空心点表示。
  7. 为箱线图添加名称,数轴等

展现了:离群点、上界、上四分位数、均值、中位数、下四分位数、下界、离群点

第一个例子:

1
sns.catplot(kind="box", x="day", y="total_bill", data=tips)

增加一个维度的信息

1
2
3
4
5
sns.catplot(kind="box",
x="day",
y="total_bill",
hue="smoker",
data=tips)

上面的图中,默认了hue参数对应的变量smoker与坐标轴上的分类变量day是相互嵌套的(如,周四吸烟、周四不吸烟),这种操作叫“dodging”
如果不是这种情形,应该禁用dodging,看下面的例子: hue的Weekend和day不是相互嵌套的

1
2
3
4
5
6
7
8
9
10
11
tips["Weekend"]= tips["day"].isin(["Sat","Sun"])
sns.catplot(kind="box", x="day", y="total_bill", hue="Weekend", data=tips)

sns.catplot(
kind="box",
x="day",
y="total_bill",
hue="Weekend",
dodge=False,
data=tips
)

第二个例子:

1
2
diamonds = sns.load_dataset('diamonds')
diamonds.head()
carat cut color clarity depth table price x y z
0 0.23 Ideal E SI2 61.5 55.0 326 3.95 3.98 2.43
1 0.21 Premium E SI1 59.8 61.0 326 3.89 3.84 2.31
2 0.23 Good E VS1 56.9 65.0 327 4.05 4.07 2.31
3 0.29 Premium I VS2 62.4 58.0 334 4.20 4.23 2.63
4 0.31 Good J SI2 63.3 58.0 335 4.34 4.35 2.75
1
sns.catplot(x='color',y='price',kind = 'boxen',data=diamonds)

1
sns.catplot(x='color',y='price',kind = 'boxen',data=diamonds,hue='cut')

catplot(kind=“boxen”) : 箱线图进阶

与箱线图相似但是能展示更多关于数据分布形状的信息,它对大数据更加友好

1
sns.catplot(kind="boxen", x="day", y="total_bill", data=tips)

catplot(kind=“violin”): 小提琴图

它将箱线图和核密度估计(kde: kernel density estimation)结合起来

小提琴图 (Violin Plot)是用来展示多组数据的分布状态以及概率密度。这种图表结合了箱形图和密度图的特征,主要用来显示数据的分布形状。跟箱形图类似,但是在密度层面展示更好。在数据量非常大不方便一个一个展示的时候小提琴图特别适用。

中间的黑色粗条表示四分位数范围,从其延伸的幼细黑线代表 95% 置信区间,而白点则为中位数。

箱形图在数据显示方面受到限制,简单的设计往往隐藏了有关数据分布的重要细节。例如使用箱形图时,我们不能了解数据分布是双模还是多模。虽然小提琴图可以显示更多详情,但它们也可能包含较多干扰信息

1
sns.catplot(x="total_bill", y="day", kind="violin",data=tips,hue="time")

1
sns.catplot(x='total_bill',y='day',kind = 'violin',data=tips,hue='sex')

参数split=Ture

当一个额外的分类变量仅有2个水平时,我们也可以将它赋给hue参数,并且设置split=True,这样我们可以更加充分地利用空间来表达更多信息:

1
2
3
4
5
6
sns.catplot(kind="violin",
x="total_bill",
y="day",
hue="time",
split=True,
data=tips)

1
2
3
4
5
6
sns.catplot(kind="violin",
x="total_bill",
y="day",
hue="sex",
split=True,
data=tips)

分类统计估计图

学习博客:https://www.jianshu.com/p/8bb06d3fd21b

条形图:catplot(kind=“bar”)

条形图表示数值变量与每个矩形高度的中心趋势的估计值,并使用误差线提供关于该估计值附近的不确定性的一些指示。具体用法如下:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
seaborn.barplot(
x=None,
y=None,
hue=None,# 按照列名中的值分类形成分类的条形图
data=None,
order=None,#(lists of strings)用于控制条形图的顺序
hue_order=None,#(lists of strings)用于控制条形图的顺序
estimator=(function mean),# <function name>控制条形图的取整列数据的什么值
ci=95,# 统计学上的置信区间(在0-100之间),若填写"sd",则误差棒用标准误差。
n_boot=1000,
units=None,
orient=None,
color=None,
palette=None, #调色板,控制不同的颜色style
saturation=0.75,
errcolor='.26',
errwidth=None,
capsize=None, # 设置误差棒帽条(上下两根横线)的宽度
dodge=True,
ax=None,
**kwargs)

我们采用Titanic数据集

1
2
titanic = sns.load_dataset('titanic')
titanic.head()
survived pclass sex age sibsp parch fare embarked class who adult_male deck embark_town alone alive
0 0 3 male 22.0 1 0 7.2500 S Third man True NaN Southampton no False
1 1 1 female 38.0 1 0 71.2833 C First woman False C Cherbourg yes False
2 1 3 female 26.0 0 0 7.9250 S Third woman False NaN Southampton yes True
3 1 1 female 35.0 1 0 53.1000 S First woman False C Southampton yes False
4 0 3 male 35.0 0 0 8.0500 S Third man True NaN Southampton no True
1
sns.catplot(x='sex',y='survived',kind='bar',data=titanic,hue='class')

从中我们可以很明显的看到女性幸存者明现多于男性幸存者,且头等舱的幸存率比二等舱、三等舱的幸存率都要大

修改 palette ,我们可以获得多种配色:

1
2
3
4
5
6
7
sns.catplot(
x='sex',
y='survived',
kind='bar',
data=titanic,
hue='class',
palette='ch:0.95')

1
2
3
4
5
6
7
8
9
10
11
12
13
14
sns.catplot(
x='sex',
y='survived',
kind='bar',
data=titanic,
hue='class',
capsize=.2)
sns.catplot(
x='sex',
y='survived',
kind='bar',
data=titanic,
hue='class',
capsize=.5)

点图:catplot(kind=“point”)

点图代表散点图位置的数值变量的中心趋势估计,并使用误差线提供关于该估计的不确定性的一些指示。点图可能比条形图更有用于聚焦一个或多个分类变量的不同级别之间的比较。他们尤其善于表现交互作用:一个分类变量的层次之间的关系如何在第二个分类变量的层次之间变化。连接来自相同色调等级的每个点的线允许交互作用通过斜率的差异进行判断,这比对几组点或条的高度比较容易。具体用法如下:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
seaborn.pointplot(
x=None,
y=None,
hue=None,
data=None,
order=None,
hue_order=None,
estimator=(function mean),
ci=95,
n_boot=1000,
units=None,
markers='o',
linestyles='-',
dodge=False,
join=True,
scale=1,
orient=None,
color=None,
palette=None,
errwidth=None,
capsize=None,
ax=None,
**kwargs)

比如:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
sns.set_style("white")
sns.catplot(
x='sex',
y='survived',
kind='point',
data=titanic,
hue='class',
)
sns.set_style("darkgrid")
sns.catplot(
x='sex',
y='survived',
kind='point',
data=titanic,
hue='class',
)

直方图:catplot(kind=“count”)

一个计数图可以被认为是一个分类直方图,而不是定量的变量。基本的api和选项与barplot()相同,因此您可以比较嵌套变量中的计数。(工作原理就是对输入的数据分类,条形图显示各个分类的数量)具体用法如下:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
seaborn.countplot(
x=None,
y=None,
hue=None,
data=None,
order=None,
hue_order=None,
orient=None,
color=None,
palette=None,
saturation=0.75,
dodge=True,
ax=None,
**kwargs)

注:countplot参数和barplot基本差不多,可以对比着记忆,有一点不同的是countplot中不能同时输入x和y,且countplot没有误差棒。因为countplot的x或y轴就是count,是用来计算数量的

这里我直接使用了 countplot()而不是 catplot(kind=’count’)是因为catplot无法画子图。

1
2
3
4
5
6
7
8
9
10
plt.subplot(1,2,1)
sns.countplot(x='sex',
data=titanic,
hue='class',
)
plt.subplot(1,2,2)
sns.countplot(y='survived',
data=titanic,
hue='class',
)

同样,我们修改palette可以修改配色

1
2
3
4
5
6
7
8
9
10
11
12
plt.subplot(1,2,1)
sns.countplot(x='sex',
data=titanic,
hue='class',
palette="Set2"
)
plt.subplot(1,2,2)
sns.countplot(y='survived',
data=titanic,
hue='class',
palette="Set3"
)

Distribution plots

学习博客:https://www.jianshu.com/p/844f66d00ac1

kdeplot()

核密度估计(kernel density estimation)是在概率论中用来估计未知的密度函数,属于非参数检验方法之一。通过核密度估计图可以比较直观的看出数据样本本身的分布特征。具体用法如下:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
seaborn.kdeplot(
data,
data2=None,
shade=False,
vertical=False,# 表示以X轴进行绘制还是以Y轴进行绘制
kernel='gau',
bw='scott',
gridsize=100,
cut=3,# 参数表示绘制的时候,切除带宽往数轴极限数值的多少(默认为3)
clip=None,
legend=True,
cumulative=False, # 是否绘制累积分布
shade_lowest=True, # 若为True,则在kde曲线下面的区域中进行阴影处理
color: # color控制曲线及阴影的颜色
cbar=False,# 参数若为True,则会添加一个颜色棒(颜色帮在二元kde图像中才有)
cbar_ax=None,
cbar_kws=None,
ax=None,
**kwargs)

绘制简单的一维kde图像

1
2
3
4
import numpy as np 
x=np.random.randn(100)
sns.kdeplot(x)
plt.savefig('67')

1
sns.kdeplot(x,cut=0)

进行阴影处理

1
sns.kdeplot(x,shade=True,color="g")

vertical

vertical为true时,x轴y轴交换

1
sns.kdeplot(x,vertical=True)

二维kde图

1
2
y=np.random.randn(100)
sns.kdeplot(x,y,shade=True)

添加一个颜色棒

1
sns.kdeplot(x,y,shade=True,cbar=True,color='r')

distplot()

displot()集合了matplotlib的hist()与核函数估计kdeplot的功能,增加了rugplot分布观测条显示与利用scipy库fit拟合参数分布的新颖用途。具体用法如下:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
seaborn.distplot(
a,
bins=None, # int或list,控制直方图的划分
hist=True, # 调节是否显示直方图
kde=True, # 调节是否显示核密度估计
rug=False,# 控制是否生成观测数值的小细条
fit=None, # 控制拟合的参数分布图形,能够直观地评估它与观察数据的对应关系
hist_kws=None,# 参数接收字典类型,可以自行定义更多高级的样式
kde_kws=None,
rug_kws=None,
fit_kws=None,
color=None,
vertical=False,
norm_hist=False, #若为True, 则直方图高度显示密度而非计数(含有kde图像中默认为True)
axlabel=None,
label=None,
ax=None)

先介绍一下直方图(Histograms):

直方图又称质量分布图,它是表示资料变化情况的一种主要工具。用直方图可以解析出资料的规则性,比较直观地看出产品质量特性的分布状态,对于资料分布状况一目了然,便于判断其总体质量分布情况。直方图表示通过沿数据范围形成分箱,然后绘制条以显示落入每个分箱的观测次数的数据分布。

通过具体的例子来体验一下distplot的用法:

1
sns.distplot(x,color="g")

通过histkde参数调节是否显示直方图及核密度估计(默认hist,kde均为True)

1
2
3
4
5
import matplotlib.pyplot as plt
fig,axes=plt.subplots(1,3) #创建一个一行三列的画布
sns.distplot(x,ax=axes[0]) #左图
sns.distplot(x,hist=False,ax=axes[1]) #中图
sns.distplot(x,kde=False,ax=axes[2]) #右图

bins:int或list,控制直方图的划分

1
2
3
4
5
fig,axes=plt.subplots(1,2) 
sns.distplot(x,kde=False,bins=20,ax=axes[0])
#左图:分成20个区间
sns.distplot(x,kde=False,bins=[x for x in range(4)],ax=axes[1])
#右图:以0,1,2,3为分割点,形成区间[0,1],[1,2],[2,3],区间外的值不计入。

rag:控制是否生成观测数值的小细条

1
2
3
fig,axes=plt.subplots(1,2)
sns.distplot(x,rug=True,ax=axes[0]) #左图
sns.distplot(x,ax=axes[1]) #右图

fit:控制拟合的参数分布图形,能够直观地评估它与观察数据的对应关系(黑色线条为确定的分布)

1
2
from scipy.stats import *
sns.distplot(x,hist=False,fit=norm) #拟合标准正态分布

hist_kws, kde_kws, rug_kws, fit_kws参数接收字典类型,可以自行定义更多高级的样式

1
sns.distplot(x,kde_kws={"label":"KDE"},vertical=True,color="y")

norm_hist:若为True, 则直方图高度显示密度而非计数(含有kde图像中默认为True)

1
2
3
fig,axes=plt.subplots(1,2)
sns.distplot(x,norm_hist=True,kde=False,ax=axes[0]) #左图
sns.distplot(x,kde=False,ax=axes[1]) #右图

jointplot()

学习自官方文档:http://seaborn.pydata.org/generated/seaborn.jointplot.html

joint axes 联合分布 轴

marginal axes 边缘分布 轴

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
seaborn.jointplot(
x,
y,
# strings or vectors Data or names of variables in data.
data=None,
# DataFrame, optional :DataFrame when x and y are variable names.
kind='scatter',
# { “scatter” | “reg” | “resid” | “kde” | “hex” }, optional :Kind of plot to draw.
color=None,
# Color used for the plot elements.
height=6,
# numeric, optional :Size of the figure (it will be square).
ratio=5,
#numeric, optional :Ratio of joint axes height to marginal axes height.
space=0.2,
#numeric, optional :Space between the joint and marginal axes
dropna=True,
#bool, optional :If True, remove observations that are missing from x and y.
xlim=None,
ylim=None,
#two-tuples, optional :Axis limits to set before plotting.
joint_kws=None,
marginal_kws=None,
annot_kws=None,
#dicts, optional : Additional keyword arguments for the plot components.
**kwargs
)

先从最简单的开始:

1
2
3
sns.set(style="white", color_codes=True)
tips = sns.load_dataset("tips")
sns.jointplot(x="total_bill", y="tip", data=tips)

kind = ‘reg’

1
sns.jointplot("total_bill", "tip", data=tips, kind="reg")

把原来的scatter散点图换成六边形

kind=’hex’

1
sns.jointplot("total_bill", "tip", data=tips, kind="hex")

kind = ‘kde’ 。

1
2
3
4
5
6
7
8
9
iris = sns.load_dataset("iris")
sns.jointplot(
"sepal_width",
"petal_length",
data=iris,
kind="kde",
space=0,
color="g"
)

kind = ‘resid’

1
sns.jointplot("total_bill", "tip", data=tips, kind="resid")

在上图的基础上再加入散点图

1
2
3
4
5
sns.jointplot(
"sepal_length",
"sepal_width",
data=iris,
color="r").plot_joint(sns.kdeplot, zorder=0, n_levels=6)

给x、y轴命名

1
2
x, y = np.random.randn(2, 300)
sns.jointplot(x, y, kind="hex").set_axis_labels("x", "y")

利用 height和ratio将更多空间给 边际图

1
2
3
4
5
6
sns.jointplot("total_bill", 
"tip",
data=tips,
height=5,
ratio=3,
color="g")

传入一些字典,自定义图画:

1
2
3
4
5
6
7
8
9
sns.jointplot(
"petal_length",
"sepal_length",
data=iris,
marginal_kws=dict(bins=15, rug=True),
annot_kws=dict(stat="r"),
s=40,
edgecolor="w",
linewidth=1)

Pair grids

pairplot() 二元分布图

pairplot中pair是成对的意思,pairplot主要展现的是变量两两之间的关系(线性或非线性,有无较为明显的相关关系)

主对角线是数据集中每一个数值型数据列的直方图(反映数量)。所以说,这个函数只对数值型的列应用。还有,上图中每一个列的其他图都代表数据集中的一个变量跟其他每一个变量的分布情况。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
seaborn.pairplot(
data,
hue=None,
hue_order=None,
palette=None,
vars=None,
x_vars=None,
y_vars=None,
kind='scatter',
diag_kind='auto',
markers=None,
height=2.5,
aspect=1,
corner=False,
dropna=True,
plot_kws=None,
diag_kws=None,
grid_kws=None,
size=None)

data: DataFrame

Tidy (long-form) dataframe where each column is a variable and each row is an observation.

hue: string (variable name), optional 针对某一字段进行分类

Variable in data to map plot aspects to different colors.

hue_order: list of strings

Order for the levels of the hue variable in the palette

palette: dict or seaborn color palette

Set of colors for mapping the hue variable. If a dict, keys should be values in the hue variable.

vars: list of variable names, optional 选择数据中的特定字段,以list形式传入

Variables within data to use, otherwise use every column with a numeric datatype.

{x, y}_vars: lists of variable names, optional 选择数据中的特定字段,以list形式传入

Variables within data to use separately for the rows and columns of the figure; i.e. to make a non-square plot.

kind: {‘scatter’, ‘reg’}, optional 用于控制非对角线上的图的类型

Kind of plot for the non-identity relationships.

kind 参数设置为 "reg" 会为非对角线上的散点图拟合出一条回归直线,更直观地显示变量之间的关系

diag_kind: {‘auto’, ‘hist’, ‘kde’, None}, optional 控制对角线上的图的类型

Kind of plot for the diagonal subplots. The default depends on whether "hue" is used or not.

markers: single matplotlib marker code or list, optional 控制散点的样式

Either the marker to use for all datapoints or a list of markers with a length the same as the number of levels in the hue variable so that differently colored points will also have different scatterplot markers.

height: scalar, optional

Height (in inches) of each facet.

aspect: scalar, optional

Aspect * height gives the width (in inches) of each facet.

corner: bool, optional

If True, don’t add axes to the upper (off-diagonal) triangle of the grid, making this a “corner” plot.

dropna: boolean, optional

Drop missing values from the data before plotting.

{plot, diag, grid}_kws: dicts, optional plot_kws用于控制非对角线上的图的样式 diag_kws用于控制对角线上图的样式

Dictionaries of keyword arguments. plot_kws are passed to the bivariate plotting function, diag_kws are passed to the univariate plotting function, and grid_kws are passed to the PairGrid constructor.

这次我们选择鸢尾花数据集。

sepal_length sepal_width petal_length petal_width species
0 5.1 3.5 1.4 0.2 setosa
1 4.9 3.0 1.4 0.2 setosa
2 4.7 3.2 1.3 0.2 setosa
3 4.6 3.1 1.5 0.2 setosa
4 5.0 3.6 1.4 0.2 setosa
1
2
3
4
import seaborn as sns  
sns.set(style="ticks", color_codes=True)
iris = sns.load_dataset("iris")
sns.pairplot(iris)

我们给hue传入参数,那么pairplot就会根据species自动分类

1
sns.pairplot(iris, hue="species")

切换配色

1
sns.pairplot(iris, hue="species", palette="husl")

给不同种类的花卉用上不同种类的标记:圆形,正方形,菱形

1
sns.pairplot(iris, hue="species", markers=["o", "s", "D"])

只选择四个维度中的两个维度来画一个子图

1
sns.pairplot(iris, vars=["sepal_width", "sepal_length"])

用height属性设置图画的大小

1
sns.pairplot(iris, height=3,vars=["sepal_width", "sepal_length"])

选择数据中的特定字段进行绘图

1
2
3
4
sns.pairplot(
iris,
x_vars=["sepal_width", "sepal_length"],
y_vars=["petal_width", "petal_length"])

只画出下三角

1
sns.pairplot(iris, corner=True)

将diag_kind 设置成核密度图,改变对角线上的图形样式

1
sns.pairplot(iris, diag_kind="kde")

把非对角线上的图形改成 regplot,也就是绘画出一条回归直线

1
sns.pairplot(iris, kind="reg")

Pass keyword arguments down to the underlying functions (it may be easier to use PairGrid directly):

1
2
3
4
5
6
sns.pairplot(
iris,
diag_kind="kde",
markers="+",
plot_kws=dict(s=50, edgecolor="b", linewidth=1),
diag_kws=dict(shade=True))

Regression plots

regplot: 可视化线性回归关系

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
seaborn.regplot(
x,
y,
data=None,
x_estimator=None,
x_bins=None,
x_ci='ci',
scatter=True,
fit_reg=True,
ci=95,
n_boot=1000,
units=None,
seed=None,
order=1,
logistic=False,
lowess=False,
robust=False,
logx=False,
x_partial=None,
y_partial=None,
truncate=True,
dropna=True,
x_jitter=None,
y_jitter=None,
label=None,
color=None,
marker='o',
scatter_kws=None,
line_kws=None,
ax=None)
  • x, y: string, series, or vector array

    Input variables. If strings, these should correspond with column names in data. When pandas objects are used, axes will be labeled with the series name.

  • data : DataFrame

    Tidy (“long-form”) dataframe where each column is a variable and each row is an observation.

  • x_estimator : callable that maps vector -> scalar, optional 传入一个函数

    Apply this function to each unique value of x and plot the resulting estimate. This is useful when x is a discrete variable. If x_ci is given, this estimate will be bootstrapped and a confidence interval will be drawn.

    这个函数对每一个x计算估计值并绘制。

  • x_bins : int or vector, optional

    x变量分为离散的bin,然后估计中心趋势和置信区间。这种操作仅影响散点图的绘制方式;回归仍然适合原始数据。 This parameter is interpreted either as the number of evenly-sized (not necessary spaced) bins or the positions of the bin centers. When this parameter is used, it implies that the default of x_estimator is numpy.mean.

  • x_ci : “ci”, “sd”, int in [0, 100] or None, optional

    Size of the confidence interval used when plotting a central tendency for discrete values of x. If "ci", defer to the value of the ci parameter.

    If "sd", skip bootstrapping and show the standard deviation of the observations in each bin.

  • scatter : bool, optional

    If True, draw a scatterplot with the underlying observations (or the x_estimator values).

  • fit_reg : bool, optional

    如果为True,则估计并绘制与xy变量相关的回归模型。

  • ci : int in [0, 100] or None, optional

    Size of the confidence interval for the regression estimate. This will be drawn using translucent bands around the regression line. The confidence interval is estimated using a bootstrap; for large datasets, it may be advisable to avoid that computation by setting this parameter to None.

  • n_boot : int, optional

    Number of bootstrap resamples used to estimate the ci. The default value attempts to balance time and stability; you may want to increase this value for “final” versions of plots.

  • units : variable name in data, optional

    If the x and y observations are nested within sampling units, those can be specified here. This will be taken into account when computing the confidence intervals by performing a multilevel bootstrap that resamples both units and observations (within unit). This does not otherwise influence how the regression is estimated or drawn.

  • seed : int, numpy.random.Generator, or numpy.random.RandomState, optional

    随机数生成器

  • order : int, optional

    If order is greater than 1, use numpy.polyfit to estimate a polynomial regression.

  • logistic: bool, optional

    If True, assume that y is a binary variable and use statsmodels to estimate a logistic regression model. Note that this is substantially more computationally intensive than linear regression, so you may wish to decrease the number of bootstrap resamples (n_boot) or set ci to None.

  • lowess : bool, optional

    If True, use statsmodels to estimate a nonparametric lowess model (locally weighted linear regression). Note that confidence intervals cannot currently be drawn for this kind of model.

  • robust : bool, optional

    If True, use statsmodels to estimate a robust regression. This will de-weight outliers. Note that this is substantially more computationally intensive than standard linear regression, so you may wish to decrease the number of bootstrap resamples (n_boot) or set ci to None.

  • logx : bool, optional

    如果为True,则估计形式为y〜log(x)的线性回归,但在输入空间中绘制散点图和回归模型。请注意,这 x必须是正的。

  • {x,y}_partial : strings in data or matrices

    Confounding variables to regress out of the x or y variables before plotting.

  • truncate : bool, optional

    If True, the regression line is bounded by the data limits. If False, it extends to the x axis limits.

  • {x,y}_jitter : floats, optional

    Add uniform random noise of this size to either the x or y variables. The noise is added to a copy of the data after fitting the regression, and only influences the look of the scatterplot. This can be helpful when plotting variables that take discrete values.

  • label : string

    应用于散点图或回归线(如果scatterFalse)的标签,以用于图例。

  • color : matplotlib color

    Color to apply to all plot elements; will be superseded by colors passed in scatter_kws or line_kws.

  • marker : matplotlib marker code

    Marker to use for the scatterplot glyphs.

  • {scatter,line}_kws : dictionaries

    Additional keyword arguments to pass to plt.scatter and plt.plot.

  • ax : matplotlib Axes, optional

    Axes object to draw the plot onto, otherwise uses the current Axes.

Plot the relationship between two variables in a DataFrame:

1
2
3
import seaborn as sns; sns.set(color_codes=True)
tips = sns.load_dataset("tips")
ax = sns.regplot(x="total_bill", y="tip", data=tips)

Plot with two variables defined as numpy arrays; use a different color:

1
2
3
4
import numpy as np; np.random.seed(8)
mean, cov = [4, 6], [(1.5, .7), (.7, 1)]
x, y = np.random.multivariate_normal(mean, cov, 80).T
ax = sns.regplot(x=x, y=y, color="g")

Plot with two variables defined as pandas Series; use a different marker:

1
2
3
import pandas as pd
x, y = pd.Series(x, name="x_var"), pd.Series(y, name="y_var")
ax = sns.regplot(x=x, y=y, marker="+")

Use a 68% confidence interval, which corresponds with the standard error of the estimate, and extend the regression line to the axis limits:

1
ax = sns.regplot(x=x, y=y, ci=68, truncate= False )

Plot with a discrete x variable and add some jitter:加入一些偏移量

1
ax = sns.regplot(x="size", y="total_bill", data=tips, x_jitter=.1)

Plot with a discrete x variable showing means and confidence intervals for unique values:

1
2
3
4
5
ax = sns.regplot(
x="size",
y="total_bill",
data=tips,
x_estimator=np.mean)

把连续的变量转到离散的bins中

1
ax = sns.regplot(x=x, y=y, x_bins=4)

Fit a higher-order polynomial regression:

1
2
3
4
5
6
7
ans = sns.load_dataset("anscombe")
ax = sns.regplot(
x="x",
y="y",
data=ans.loc[ans.dataset == "II"],
scatter_kws={"s": 80},
order=2, ci=None)

Fit a robust regression and don’t plot a confidence interval:

1
2
3
4
5
6
ax = sns.regplot(
x="x",
y="y",
data=ans.loc[ans.dataset == "III"],
scatter_kws={"s": 80},
robust=True, ci=None)

Fit a logistic regression; jitter the y variable and use fewer bootstrap iterations:

1
2
3
4
5
6
7
8
tips["big_tip"] = (tips.tip / tips.total_bill) > .175
ax = sns.regplot(
x="total_bill",
y="big_tip",
data=tips,
logistic=True,
n_boot=500,
y_jitter=.03)

Fit the regression model using log(x):

1
2
3
4
5
6
ax = sns.regplot(
x="size",
y="total_bill",
data=tips,
x_estimator=np.mean,
logx=True)

Matrix plots

热力图在实际中常用于展示一组变量的相关系数矩阵,在展示列联表的数据分布上也有较大的用途,通过热力图我们可以非常直观地感受到数值大小的差异状况。heatmap的API如下所示:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
seaborn.heatmap(
data,
vmin=None,
vmax=None,
cmap=None,
center=None,
robust=False,
annot=None,
fmt='.2g',
annot_kws=None,
linewidths=0,
linecolor='white',
cbar=True,
cbar_kws=None,
cbar_ax=None,
square=False,
xticklabels='auto',
yticklabels='auto',
mask=None,
ax=None,
**kwargs)

Parameters

  • data : rectangular dataset

    2D dataset that can be coerced into an ndarray. If a Pandas DataFrame is provided, the index/column information will be used to label the columns and rows.

  • vmin, vmax :floats, optional 设置颜色带的最大值、最小值

    Values to anchor the colormap, otherwise they are inferred from the data and other keyword arguments.

  • cmap :matplotlib colormap name or object, or list of colors, optional 设置颜色带的色系

    The mapping from data values to color space. If not provided, the default will depend on whether center is set.

  • center :float, optional 设置颜色带的分界线

    The value at which to center the colormap when plotting divergant data. Using this parameter will change the default cmap if none is specified.

  • robust:bool, optional

    If True and vmin or vmax are absent, the colormap range is computed with robust quantiles instead of the extreme values.

  • annot :bool or rectangular dataset, optional 是否显示数值注释

    If True, write the data value in each cell. If an array-like with the same shape as data, then use this to annotate the heatmap instead of the data. Note that DataFrames will match on position, not index.

  • fmt :string, optional format的缩写,设置数值的格式化形式

    String formatting code to use when adding annotations.

  • annot_kws :dict of key, value mappings, optional

    Keyword arguments for ax.text when annot is True.

  • linewidths : float, optional 控制每个小方格之间的间距

    Width of the lines that will divide each cell.

  • linecolor : color, optional 控制分割线的颜色

    Color of the lines that will divide each cell.

  • cbar : boolean, optional 是否需要画颜色带

    Whether to draw a colorbar.

  • cbar_kws : dict of key, value mappings, optional 关于颜色带的设置

    Keyword arguments for fig.colorbar.

  • cbar_ax :matplotlib Axes, optional

    Axes in which to draw the colorbar, otherwise take space from the main Axes.

  • square : boolean, optional

    If True, set the Axes aspect to “equal” so each cell will be square-shaped.

  • xticklabels, yticklabels : “auto”, bool, list-like, or int, optional

    If True, plot the column names of the dataframe. If False, don’t plot the column names. If list-like, plot these alternate labels as the xticklabels. If an integer, use the column names but plot only every n label. If “auto”, try to densely plot non-overlapping labels.

  • mask : boolean array or DataFrame, optional

    传入布尔型矩阵,若为矩阵内为True,则热力图相应的位置的数据将会被屏蔽掉(常用在绘制相关系数矩阵图)

  • ax : matplotlib Axes, optional

    Axes in which to draw the plot, otherwise use the currently-active Axes.

  • kwargs :other keyword arguments

    All other keyword arguments are passed to matplotlib.axes.Axes.pcolormesh().

Plot a heatmap for a numpy array:

1
2
3
4
import numpy as np; np.random.seed(0)
import seaborn as sns; sns.set()
uniform_data = np.random.rand(10, 12)
ax = sns.heatmap(uniform_data)

Change the limits of the colormap:

1
ax = sns.heatmap(uniform_data, vmin=0, vmax=1)

Plot a heatmap for data centered on 0 with a diverging colormap:

center 改变,颜色带上的颜色也会随之改变,所以热力图上的方块颜色也会随之改变。和 cmap 不同,cmap是切换颜色带,但是center是在同一个颜色带上滑动

1
2
normal_data = np.random.randn(10, 12)
ax = sns.heatmap(normal_data, center=0)

我们使用数据集 flights 来做下面的热力图

year 1949 1950 1951 1952 1953 1954 1955 1956 1957 1958 1959 1960
month
January 112 115 145 171 196 204 242 284 315 340 360 417
February 118 126 150 180 196 188 233 277 301 318 342 391
March 132 141 178 193 236 235 267 317 356 362 406 419
April 129 135 163 181 235 227 269 313 348 348 396 461
May 121 125 172 183 229 234 270 318 355 363 420 472
1
2
3
flights = sns.load_dataset("flights")
flights = flights.pivot("month", "year", "passengers")
ax = sns.heatmap(flights)

Annotate each cell with the numeric value using integer formatting:

如果不把fmt设置为d,那么方格中的数据就会使密密麻麻的科学计数法了

1
ax = sns.heatmap(flights, annot=True, fmt="d")

Add lines between each cell:控制每个小方格之间的间距

1
ax = sns.heatmap(flights, linewidths=.5)

Use a different colormap: 设置颜色带的色系

1
ax = sns.heatmap(flights, cmap="YlGnBu")

Center the colormap at a specific value:

这里,把center颜色带的中间颜色设置成 July,1955 这个坐标上的颜色

1
ax = sns.heatmap(flights, center=flights.loc["July", 1955])

Plot every other column label and don’t plot row labels: 不画y轴标签

1
2
data = np.random.randn(50, 20)
ax = sns.heatmap(data, xticklabels=2, yticklabels=False)

Don’t draw a colorbar: 让颜色条消失

1
ax = sns.heatmap(flights, cbar=False)

Use different axes for the colorbar: 横向显示颜色帮

1
2
3
4
5
grid_kws = {"height_ratios": (.9, .05), "hspace": .3}
f, (ax, cbar_ax) = plt.subplots(2, gridspec_kw=grid_kws)
ax = sns.heatmap(flights, ax=ax,
cbar_ax=cbar_ax,
cbar_kws={"orientation": "horizontal"})

传入布尔型矩阵,若为矩阵内为True,则热力图相应的位置的数据将会被屏蔽掉(常用在绘制相关系数矩阵图)

1
2
3
4
5
6
corr = np.corrcoef(np.random.randn(10, 200))
mask = np.zeros_like(corr)#以corr的形状生成一个全为0的矩阵
mask[np.triu_indices_from(mask)] = True #将mask的对角线及以上设置为True 下三角为0
with sns.axes_style("white"):
f, ax = plt.subplots(figsize=(7, 5))
ax = sns.heatmap(corr, mask=mask, vmax=.3, square=True)

设置 linecolor ,让小方格之间的缝隙呈现灰色

1
2
3
4
5
6
7
sns.heatmap(
data=data,
annot=True,
fmt="d",
linewidths=0.3,
linecolor="grey",
cmap="RdBu_r")

-------------本文结束,感谢您的阅读-------------