半小时拿下Python数据处理之Seaborn篇


Seaborn简介

Seaborn是一种基于matplotlib的图形可视化python库。它提供了一种高度交互式界面,便于用户能够做出各种有吸引力的统计图表。Seaborn其实是在matplotlib的基础上进行了更高级的API封装,从而使得作图更加容易,在大多数情况下使用Seaborn就能做出很具有吸引力的图,而使用matplotlib就能制作具有更多特色的图。应该把Seaborn视为matplotlib的补充,而不是替代物。同时它能高度兼容numpypandas数据结构以及scipystatsmodels等统计模式。掌握Seaborn能很大程度帮助我们更高效的观察数据与图表,并且更加深入了解它们。

其有如下特点:

  • 基于matplotlib aesthetics绘图风格,增加了一些绘图模式
  • 增加调色板功能,利用色彩丰富的图像揭示您数据中的模式
  • 运用数据子集绘制与比较单变量和双变量分布的功能
  • 运用聚类算法可视化矩阵数据
  • 灵活运用处理时间序列数据
  • 利用网格建立复杂图像集

Seaborn样式

matplotlib与seaborn绘图比较

import seaborn as sns
import numpy as np
import matplotlib as mpl
import matplotlib.pyplot as plt
%matplotlib inline
def sinplot(flip=1):
    x = np.linspace(0, 14, 100)
    for i in range(1, 7):
        plt.plot(x, np.sin(x + i * .5) * (7 - i) * flip)
sinplot() #采用matplotlib绘制

sns.set() #采用seaborn默认设置
sinplot()

Seaborn 5种主题风格

  • darkgrid
  • whitegrid
  • dark
  • white
  • ticks
sns.set_style("darkgrid")
sinplot()

sns.set_style("whitegrid")
sinplot()

sns.set_style("dark")
sinplot()

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-agcVbXkK-1589899017301)(http://image.yigouai.cn/pandas_output_13_0.png)]

sns.set_style("white")
sinplot()

sns.set_style("ticks")
sinplot()

用despine()移除轴线

样式whiteticks都可以通过去除上方和右方不必要的轴线来得到改善. 而这些是不可能在matplotlib里设置参数做到的,但是你可以调用seaborn的函数despine()来去除轴线:

sns.set_style("ticks")
sinplot()
sns.despine() # 去除上面与右面轴线

有些布局也可以通过调整轴线距数据的偏移来改善,这也能在despine()里完成.当ticks不能覆盖轴线的整个范围时,trim参数可以限制显示的轴线的范围.

data = np.random.normal(size=(20, 6)) + np.arange(6) / 2 # (20, 6) 二维数据
f, ax = plt.subplots()
sns.violinplot(data) # 琴形图
sns.despine(offset=10,trim=True)

你也可能通过设置另外的参数来控制移除哪条轴线:

sns.set_style("whitegrid")
sns.boxplot(data=data, palette="deep") #箱型图
sns.despine(left=True) #去除左边的轴线

临时设置图表样式

尽管来回切换样式是很简单的,但是你也可以在with语句里用axes_style()函数来临时设置控制布局的参数.这也允许你用不同的风格来制作图表,这是一种常见的编程模式,使得控制样式和风格能够多变。

with sns.axes_style("darkgrid"):
    plt.subplot(211)
    sinplot()
plt.subplot(212)
sinplot(-1)

重载seaborn样式的元素

如果你想要自定义seaborn的样式,你可以用词典(dictionary)将一系列控制参数赋值给axes_style()函数和set_style()函数的rc参数里. 注意你只能通过这种方式重载样式定义的部分.(但是,更高级的set()函数可以处理包含任意matplotlib参数的词典)

如果你想要知道都包含了哪些参数,你可以调用没有参数的函数,它会返回当前设置:

sns.axes_style()
{'axes.axisbelow': True,
 'axes.edgecolor': '.8',
 'axes.facecolor': 'white',
 'axes.grid': True,
 'axes.labelcolor': '.15',
 'axes.linewidth': 1.0,
 'figure.facecolor': 'white',
 'font.family': ['sans-serif'],
 'font.sans-serif': ['Arial',
  'DejaVu Sans',
  'Liberation Sans',
  'Bitstream Vera Sans',
  'sans-serif'],
 'grid.color': '.8',
 'grid.linestyle': '-',
 'image.cmap': 'rocket',
 'legend.frameon': False,
 'legend.numpoints': 1,
 'legend.scatterpoints': 1,
 'lines.solid_capstyle': 'round',
 'text.color': '.15',
 'xtick.color': '.15',
 'xtick.direction': 'out',
 'xtick.major.size': 0.0,
 'xtick.minor.size': 0.0,
 'ytick.color': '.15',
 'ytick.direction': 'out',
 'ytick.major.size': 0.0,
 'ytick.minor.size': 0.0}

然后你可以设置这些参数的不同版本:

sns.set_style("darkgrid", {"axes.facecolor": ".9"})
sinplot()

使用plotting_context()set_context()设置布局元素的规模

布局元素的规模被独立的参数集合控制,这能让你使用相同的代码得到不同大小的规模合适的布局

首先让我们重新调用set()函数得到缺省设置:

sns.set()

有4种预设好的上下文(context),按相对大小排序分别是:paper, notebook, talk,和poster.缺省的规模是notebook,上述的所有图表都是它.

sns.set_context("paper")
plt.figure(figsize=(8, 6))
sinplot()

sns.set_context("talk")
plt.figure(figsize=(8, 6))
sinplot()

sns.set_context("poster")
plt.figure(figsize=(8, 6))
sinplot()

大部分你现在所稽首的样式函数都应该被转换成上下文函数.

你可以调用set_context(),将上下文的名字当作一个参数传入,然后你就可以通过提供一个写有各项设置值的词典重载上下文的参数。

在修改上下文时,你也可以单独修改字体大小。(更高级的set()里也可以这么做)

sns.set_context("notebook", font_scale=1.5, rc={"lines.linewidth": 2.5})
sinplot()

Seaborn配色方案

配色是图表设计里最重要的方面之一,因为如果配色方案好,它可以清晰展现数据的模式和规律,否则就会把这些规律和模式隐藏起来。
Seaborn让选择和使用配色方案变得简单且适用于你工作的数据种类和你想要达到的可视化目标。

import numpy as np
import seaborn as sns
import matplotlib.pyplot as plt
%matplotlib inline
sns.set(rc={"figure.figsize": (6, 6)})

调色板

  • 颜色很重要
  • color_palette()能传入任何Matplotlib所支持的颜色
  • color_palette()不写参数则默认颜色
  • set_palette()设置所有图的颜色

分类色板

current_palette = sns.color_palette()
sns.palplot(current_palette)

6个默认的颜色循环主题: deep, muted, pastel, bright, dark, colorblind.

圆形画板

当你有六个以上的分类要区分时,最简单的方法就是在一个圆形的颜色空间中画出均匀间隔的颜色(这样的色调会保持亮度和饱和度不变)。这是大多数的当他们需要使用比当前默认颜色循环中设置的颜色更多时的默认方案。
最常用的方法是使用hls的颜色空间,这是RGB值的一个简单转换。

sns.palplot(sns.color_palette("hls", 8))

#应用调色板
data = np.random.normal(size=(20, 8)) + np.arange(8) / 2  #生成数据
sns.boxplot(data=data,palette=sns.color_palette("hls", 8))#按照生成的颜色对应不同的分类
<matplotlib.axes._subplots.AxesSubplot at 0x1a1f2bc978>

hls_palette()函数来控制颜色的亮度和饱和

  • l-亮度 lightness
  • s-饱和 saturation
sns.palplot(sns.hls_palette(8, l=.7, s=.9))

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-rNOmDHMZ-1589899017365)(http://image.yigouai.cn/pandas_output_47_0.png)]

sns.palplot(sns.color_palette("Paired",8))

使用xkcd颜色自定义调色板

xkcd包含了一套众包努力的针对随机RGB色的命名。产生了954个可以随时通过xdcd_rgb字典中调用的命名颜色。
可以通过sns.xkcd_rgb进行查看。

plt.plot([0, 1], [0, 1], sns.xkcd_rgb["pale red"], lw=3)
plt.plot([0, 1], [0, 2], sns.xkcd_rgb["medium green"], lw=3)
plt.plot([0, 1], [0, 3], sns.xkcd_rgb["denim blue"], lw=3)
[<matplotlib.lines.Line2D at 0x1a1f3264e0>]

colors = ["windows blue", "amber", "greyish", "faded green", "dusty purple"]
sns.palplot(sns.xkcd_palette(colors))

连续色板

色彩随数据变换,比如数据越来越重要则颜色越来越深

sns.palplot(sns.color_palette("Blues"))

如果想要翻转渐变,可以在面板名称中添加一个_r后缀

sns.palplot(sns.color_palette("BuGn_r"))

cubehelix_palette()调色板

色调线性变换

sns.palplot(sns.color_palette("cubehelix", 8))

sns.palplot(sns.cubehelix_palette(8, start=.5, rot=-.75))

sns.palplot(sns.cubehelix_palette(8, start=1.75, rot=-.150))

light_palette()dark_palette()调用定制连续调色板

sns.palplot(sns.light_palette("green"))

sns.palplot(sns.dark_palette("purple"))

sns.palplot(sns.light_palette("navy", reverse=True)) #渐变翻转

#应用调色板
data = np.random.normal(size=(20, 8)) + np.arange(8) / 2  #生成数据
sns.boxplot(data=data,palette=sns.cubehelix_palette(8, start=.5, rot=-.75))#按照生成的颜色对应不同的分类
<matplotlib.axes._subplots.AxesSubplot at 0x1a1f1c59b0>

Seaborn变量分析绘图

%matplotlib inline
import numpy as np
import pandas as pd
from scipy import stats, integrate
import matplotlib.pyplot as plt

import seaborn as sns
sns.set(color_codes=True)
np.random.seed(sum(map(ord, "distributions")))

使用sns.distplot()函数画直方图

x = np.random.normal(size=100)
sns.distplot(x,kde=False) #distplot()函数会根据输入数据自动绘制直方图
<matplotlib.axes._subplots.AxesSubplot at 0x1a1fb2a240>

你也可以通过bins自己划分直方图的切分粒度

sns.distplot(x, bins=20, kde=False)
<matplotlib.axes._subplots.AxesSubplot at 0x1a202ebdd8>

通过fit查看数据分布的情况

x = np.random.gamma(6, size=200)
sns.distplot(x, kde=False, fit=stats.gamma)
<matplotlib.axes._subplots.AxesSubplot at 0x1a204df5f8>

使用jointplot()函数绘制散点图

观测两个变量之间的分布关系最好用散点图

#生成数据
mean, cov = [0, 1], [(1, .5), (.5, 1)] #自定义均值与协方差
data = np.random.multivariate_normal(mean, cov, 200) #生成200个数据
df = pd.DataFrame(data, columns=["x", "y"]) #通过pandas读入数据
print(df.head())
          x         y
0  0.585042  1.162682
1  0.722117  2.141580
2  0.120990  0.498821
3 -0.795773  2.085261
4 -0.614260  2.215906
sns.jointplot(x="x", y="y", data=df)
<seaborn.axisgrid.JointGrid at 0x1a206a5b00>

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-CiJthrnE-1589899017442)(http://image.yigouai.cn/pandas_output_75_1.png)]

通过kind="hex"使散点图具备透视性,更加容易查看数据的散点分布密度情况

x, y = np.random.multivariate_normal(mean, cov, 1000).T
with sns.axes_style("white"):
    sns.jointplot(x=x, y=y, kind="hex", color="k")

使用pairplot()函数绘制关系图

两不同变量比较绘制散点图,变量自身比较绘制直方图

iris = sns.load_dataset("iris") #载入鸢尾花数据集
sns.pairplot(iris) #绘制
<seaborn.axisgrid.PairGrid at 0x1a20ef4588>

Seaborn回归分析绘图

%matplotlib inline
import numpy as np
import pandas as pd
import matplotlib as mpl
import matplotlib.pyplot as plt
import seaborn as sns
sns.set(color_codes=True)
np.random.seed(sum(map(ord, "regression")))

tips = sns.load_dataset("tips") # 导入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

regplot()绘制回归关系图

#采用regplot绘制拟合的数据线
sns.regplot(x="total_bill", y="tip", data=tips) #x轴代表花的钱的数据,y轴对应给小费的数据
<matplotlib.axes._subplots.AxesSubplot at 0x22d8d8db518>

lmplot()绘制回归关系图

lmplot是一种集合基础绘图与基于数据建立回归模型的绘图方法。旨在创建一个方便拟合数据集回归模型的绘图方法,利用huecolrow参数来控制绘图变量。

seaborn.lmplot(x, y, data, hue=None, col=None, row=None, palette=None, col_wrap=None, size=5, aspect=1, markers='o', sharex=True, sharey=True, hue_order=None, col_order=None, row_order=None, legend=True, legend_out=True, x_estimator=None, x_bins=None, x_ci='ci', scatter=True, fit_reg=True, ci=95, n_boot=1000, units=None, order=1, logistic=False, lowess=False, robust=False, logx=False, x_partial=None, y_partial=None, truncate=False, x_jitter=None, y_jitter=None, scatter_kws=None, line_kws=None)

参数说明:

  • hue, col, row : strings #定义数据子集的变量,并在不同的图像子集中绘制
  • size : scalar, optional #定义子图的高度
  • markers : matplotlib marker code or list of marker codes, optional #定义散点的图标
  • col_wrap : int, optional #设置每行子图数量
  • order : int, optional #多项式回归,设定指数
  • logistic : bool, optional #逻辑回归
  • logx : bool, optional #转化为log(x)
#研究小费tips与总消费金额total_bill在吸烟与不吸烟人之间的关系
g = sns.lmplot(x="total_bill", y="tip", hue="smoker", data=tips,palette="Set1")

#研究在不同星期下,消费总额与消费的回归关系
# col|hue控制子图不同的变量day,col_wrap控制每行子图数量,size控制子图高度
g = sns.lmplot(x="total_bill", y="tip", col="day", hue="day",data=tips, col_wrap=2, size=3)

pokemon=pd.read_csv('../dataset/Pokemon.csv') #载入宠物小精灵战斗力数据集
pokemon.head()

# Name Type 1 Type 2 Total HP Attack Defense Sp. Atk Sp. Def Speed Generation Legendary
0 1 Bulbasaur Grass Poison 318 45 49 49 65 65 45 1 False
1 2 Ivysaur Grass Poison 405 60 62 63 80 80 60 1 False
2 3 Venusaur Grass Poison 525 80 82 83 100 100 80 1 False
3 3 VenusaurMega Venusaur Grass Poison 625 80 100 123 122 120 80 1 False
4 4 Charmander Fire NaN 309 39 52 43 60 50 65 1 False

#观察每一代攻击与防御的分布,利用二次多项式逼近
sns.lmplot(x="Defense", y="Attack",data=pokemon,col="Generation", hue="Generation",col_wrap=3, size=3,order=2)
<seaborn.axisgrid.FacetGrid at 0x22d8bce32e8>

#继续在同一图中观察不同代的sp.Atk,Sp.Def线性关系
sns.lmplot(x="Sp. Atk", y="Sp. Def", data=pokemon, hue='Generation', size=5,order=1)
<seaborn.axisgrid.FacetGrid at 0x22d8be4b5f8>

Seaborn分类分析绘图

%matplotlib inline
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") #导入鸢尾花数据集

散点图

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

问题:有重叠,无法看见数据的密度

  • 解决方法一:通过jitter抖动

抖动是平时可视化中的常用的观察“密度”的方法,除了使用参数抖动,特定的抖动需求也可以用numpy在数据上处理实现

sns.stripplot(x="day", y="total_bill", data=tips, jitter=True) # jitter抖动
<matplotlib.axes._subplots.AxesSubplot at 0x22d8a3216a0>

  • 解决方法二:通过swarmplot()函数
sns.swarmplot(x="day", y="total_bill", data=tips)
<matplotlib.axes._subplots.AxesSubplot at 0x22d87f3b128>

sns.swarmplot(x="day", y="total_bill", hue="sex",data=tips) #hue 参数控制分组绘图
<matplotlib.axes._subplots.AxesSubplot at 0x22d8a428860>

箱型图

箱形图(Box-plot)又称为盒须图、盒式图或箱线图,是一种用作显示一组数据分散情况资料的统计图。因形状如箱子而得名。

如上图所示,标示了图中每条线表示的含义,其中应用到了分位值(数)的概念。
主要包含六个数据节点,将一组数据从大到小排列,分别计算出他的上边缘,上四分位数Q3,中位数,下四分位数Q1,下边缘,还有一个异常值。

举例说明,以下是箱形图的具体例子:

这组数据显示出:

  • 最小值(minimum)=5
  • 下四分位数(Q1)=7
  • 中位数(Med–也就是Q2)=8.5
  • 上四分位数(Q3)=9
  • 最大值(maximum)=10
  • 平均值=8
  • 四分位间距=Q3-Q1=2 (即ΔQ)
  • 最大值区间: Q3+1.5ΔQ = 12
  • 最小值区间: Q1-1.5ΔQ = 4
  • mild outlier = 3.5
  • extreme outlier = 0.5
sns.boxplot(x="day", y="total_bill", hue="time", data=tips)
<matplotlib.axes._subplots.AxesSubplot at 0x22d8bbd7240>

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-EoGJB6ZG-1589899017501)(http://image.yigouai.cn/pandas_output_108_1.png)]

琴形图

seaborn.violinplot(x=None, y=None, hue=None, data=None, order=None, hue_order=None, bw='scott', cut=2, scale='area', scale_hue=True, gridsize=100, width=0.8, inner='box', split=False, orient=None, linewidth=None, color=None, palette=None, saturation=0.75, ax=None, **kwargs)
  • split: bool, optional #琴形图是否从中间分开两部分
  • scale: {“area”, “count”, “width”}, optional #用于调整琴形图的宽带。
    • area——每个琴图拥有相同的面域;
    • count——根据样本数量来调节宽度;
    • width——每个琴图则拥有相同的宽度。
  • inner: {“box”, “quartile”, “point”, “stick”, None}, optional #控制琴图内部数据点的形态。
    • box——绘制微型 boxplot;
    • quartiles——绘制四分位的分布;
    • point/stick——绘制点或小竖条。
sns.violinplot(x="total_bill", y="day", hue="time", data=tips)
<matplotlib.axes._subplots.AxesSubplot at 0x22d8a9f97b8>

sns.violinplot(x="day", y="total_bill", hue="sex", data=tips, split=True) #split: bool, optional #琴形图是否从中间分开两部分

条形图

显示值的集中趋势可以用条形图

sns.barplot(x="sex", y="survived", hue="class", data=titanic)
<matplotlib.axes._subplots.AxesSubplot at 0x22d8a5bc358>

点图

点图可以更好的描述变化差异

sns.pointplot(x="sex", y="survived", hue="class", data=titanic)
<matplotlib.axes._subplots.AxesSubplot at 0x22d8a5bcda0>

#详细指定属性值
sns.pointplot(x="class", y="survived", hue="sex", data=titanic,
              palette={"male": "g", "female": "m"}, #  指定颜色
              markers=["^", "o"],  # 指定点样式
              linestyles=["-", "--"]); # 指定线型样式

组合

#琴型图 + 分散点图
sns.violinplot(x="day", y="total_bill", data=tips, inner=None)
sns.swarmplot(x="day", y="total_bill", data=tips, color="w", alpha=.5)
<matplotlib.axes._subplots.AxesSubplot at 0x22d8a3f4908>

多层面板分类图

factorplot()函数是对各种图形的一个更高级别的API封装,在Seaborn中非常常用。

seaborn.factorplot(x=None, y=None, hue=None, data=None, row=None, col=None, col_wrap=None, estimator=<function mean>, ci=95, n_boot=1000, units=None, order=None, hue_order=None, row_order=None, col_order=None, kind='point', size=4, aspect=1, orient=None, color=None, palette=None, legend=True, legend_out=True, sharex=True, sharey=True, margin_titles=False, facet_kws=None, **kwargs)

参数说明:

  • x,y 数据集变量(变量名)
  • hue 控制分组绘图(变量名)
  • date 数据集 (数据集名)
  • row,col 更多分类变量进行平铺显示 (变量名)
  • col_wrap 每行的最高平铺数 (整数)
  • estimator 在每个分类中进行矢量到标量的映射 (矢量)
  • ci 置信区间 (浮点数或None)
  • n_boot 计算置信区间时使用的引导迭代次数 (整数)
  • units 采样单元的标识符,用于执行多级引导和重复测量设计 (数据变量或向量数据)
  • order, hue_order 对应排序列表 (字符串列表)
  • row_order, col_order 对应排序列表 (字符串列表)
  • kind : 可选:point 默认, bar 柱形图, count 频次, box 箱体, violin 提琴, strip 散点,swarm 分散点
  • size 每个面的高度(英寸) (标量)
  • aspect 纵横比 (标量)
  • orient 方向 (“v”/“h”)
  • color 颜色 (matplotlib颜色)
  • palette 调色板 (seaborn颜色色板或字典)
  • legend hue的信息面板 (True/False)
  • legend_out 是否扩展图形,并将信息框绘制在中心右边 (True/False)
  • share{x,y} 共享轴线 (True/False)
  • facet_kws FacetGrid的其他参数 (字典)
sns.factorplot(x="day", y="total_bill", hue="smoker", data=tips) #默认是点图
<seaborn.axisgrid.FacetGrid at 0x22d8a79def0>

sns.factorplot(x="day", y="total_bill", hue="smoker", data=tips, kind="bar") #绘制条形图
<seaborn.axisgrid.FacetGrid at 0x22d8a648748>

sns.factorplot(x="day", y="total_bill", hue="smoker",
               col="time", data=tips, kind="swarm") #绘制分散点图
<seaborn.axisgrid.FacetGrid at 0x22d8a867be0>

sns.factorplot(x="time", y="total_bill", hue="smoker",
               col="day", data=tips, kind="box", size=4, aspect=.5) #绘制箱型图
<seaborn.axisgrid.FacetGrid at 0x22d8a8bcb00>

Seaborn热图绘制

%matplotlib inline
import matplotlib.pyplot as plt
import numpy as np;
np.random.seed(0)
import seaborn as sns;
sns.set()

热图基础

seaborn.heatmap(data, vmin=None, vmax=None, cmap=None, center=None, robust=False, annot=None, fmt='.2g', annotkws=None, linewidths=0, linecolor='white', cbar=True, cbarkws=None, cbar_ax=None, square=False, ax=None, xticklabels=True, yticklabels=True, mask=None, **kwargs)
  • data:矩阵数据集,可以使numpy的数组(array),如果是pandas的dataframe,则df的index/column信息会分别对应到heatmap的columns和rows
  • linewidths,热力图矩阵之间的间隔大小
  • vmax,vmin, 图例中最大值和最小值的显示值,没有该参数时默认不显示
  • cmap:matplotlib的colormap名称或颜色对象;如果没有提供,默认为cubehelix map (数据集为连续数据集时) 或 RdBu_r (数据集为离散数据集时)
  • center:将数据设置为图例中的均值数据,即图例中心的数据值;通过设置center值,可以调整生成的图像颜色的整体深浅;设置center数据时,如果有数据溢出,则手动设置的vmax、vmin会自动改变
  • xticklabels: 如果是True,则绘制dataframe的列名。如果是False,则不绘制列名。如果是列表,则绘制列表中的内容作为xticklabels。 如果是整数n,则绘制列名,但每个n绘制一个label。 默认为True。
  • yticklabels: 如果是True,则绘制dataframe的行名。如果是False,则不绘制行名。如果是列表,则绘制列表中的内容作为yticklabels。 如果是整数n,则绘制列名,但每个n绘制一个label。 默认为True。默认为True。
  • annotate的缩写,annot默认为False,当annot为True时,在heatmap中每个方格写入数据
  • annot_kws,当annot为True时,可设置各个参数,包括大小,颜色,加粗,斜体字等
  • fmt,格式设置
uniform_data = np.random.rand(3, 3) #生成数据
print (uniform_data)
heatmap = sns.heatmap(uniform_data) # 生成热力图
[[ 0.64272796  0.0229858   0.21897478]
 [ 0.41076627  0.28860677  0.94805105]
 [ 0.96513582  0.57781451  0.96400349]]

# 改变颜色映射的值范围
ax = sns.heatmap(uniform_data, vmin=0.2, vmax=1)

#为以0为中心的数据绘制一张热图
ax = sns.heatmap(uniform_data, center=0)

案例分析

flights = sns.load_dataset("flights") #加载航班数据集
flights.head() #显示部分数据

year month passengers
0 1949 January 112
1 1949 February 118
2 1949 March 132
3 1949 April 129
4 1949 May 121
flights = flights.pivot("month", "year", "passengers") #修改数据排列
flights.head()

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
ax = sns.heatmap(flights) #绘制热图

ax = sns.heatmap(flights, annot=True,fmt="d") #在heatmap中每个方格写入数据,按照整数形式

ax = sns.heatmap(flights, linewidths=.5) #热力图矩阵之间的间隔大小

ax = sns.heatmap(flights, cmap="YlGnBu") #修改热图颜色

ax = sns.heatmap(flights, cbar=False) #不显示热图图例

参考

Style functions

Color palettes

Distribution plots

Categorical plots

Regression plots

Axis grid objects

10分钟python图表绘制


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章