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

  • Seaborn简介
  • Seaborn样式
    • matplotlib与seaborn绘图比较
    • Seaborn 5种主题风格
    • 用despine()移除轴线
    • 临时设置图表样式
    • 重载seaborn样式的元素
    • 使用`plotting_context()`和`set_context()`设置布局元素的规模
  • Seaborn配色方案
    • 调色板
    • 分类色板
    • 圆形画板
    • 使用xkcd颜色自定义调色板
    • 连续色板
    • `cubehelix_palette()`调色板
    • `light_palette()` 和`dark_palette()`调用定制连续调色板
  • Seaborn变量分析绘图
    • 使用`sns.distplot()`函数画直方图
    • 使用`jointplot()`函数绘制散点图
    • 使用`pairplot()`函数绘制关系图
  • Seaborn回归分析绘图
    • `regplot()`绘制回归关系图
    • `lmplot()`绘制回归关系图
  • Seaborn分类分析绘图
    • 散点图
    • 箱型图
    • 琴形图
    • 条形图
    • 点图
    • 组合
    • 多层面板分类图
  • 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 pltimport 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图表绘制


半小时拿下Python数据处理之Seaborn篇相关推荐

  1. 半小时拿下Python数据处理之Matplotlib篇

    半小时拿下Python数据处理之Matplotlib篇 matplotlib三种代码风格 pyplot pylab Object Oriented 子图 多图 散点图(scatter) 条形图 (ba ...

  2. 学python重点是什么_如果只有1小时学Python,看这篇就够了

    大家好,我是大鹏,城市数据团联合发起人,致力于Python数据分析.数据可视化的应用与教学. 和很多同学接触过程中,我发现自学Python数据分析的一个难点是资料繁多,过于复杂.大部分网上的资料总是从 ...

  3. python爬虫爬取图片无法打开_半小时入门python爬虫爬下网站图片,不能再简单了...

    阅读本文大约需要2分钟 本文旨在为没有爬虫基础的,偶尔想爬虫爬一下某个网站上的图片的初学者使用,如果你已经是对爬虫很熟悉了,下面依然有你感兴趣的东西. 我最近也才正儿八经学习了下爬虫,出于某种需要爬一 ...

  4. 自学python数据分析要多久-如果只有1小时学Python,看这篇就够了

    大家好,我是大鹏,城市数据团联合发起人,致力于Python数据分析.数据可视化的应用与教学. 和很多同学接触过程中,我发现自学Python数据分析的一个难点是资料繁多,过于复杂.大部分网上的资料总是从 ...

  5. python6小时完全入门_如果只有1小时学Python,看这篇就够了,摸摸头发你还好吗!...

    和很多同学接触过程中,我发现自学Python数据分析的一个难点是资料繁多,过于复杂.大部分网上的资料总是从Python语法教起,夹杂着大量Python开发的知识点,花了很多时间却始终云里雾里,不知道哪 ...

  6. 半小时漫画经济学2:金融危机篇-笔记

    经济的定义: 价值的创造.转化.实现. eg:大自然的水,经工厂消毒净化为矿泉水,卖给口渴的人.水实现了应有的价值.这就是资源配置. 资源配置出现问题,经济时好时坏,就是经济周期. 经济危机: 产品太 ...

  7. hadooppythonsql_半小时搞定Hadoop+Mysql+Hive+Python

    1. 说明 搭建过Hadoop集群的小伙伴一定知道,如果不用docker,半小时配好Hadoop+Mysql+Hive(后简称Hive)肯定是胡吹,有了Docker镜像,没有说明文档,配好了也不一定会 ...

  8. hive+mysql+速度_半小时搞定Hadoop+Mysql+Hive+Python

    1. 说明 搭建过Hadoop集群的小伙伴一定知道,如果不用docker,半小时配好Hadoop+Mysql+Hive(后简称Hive)肯定是胡吹,有了Docker镜像,没有说明文档,配好了也不一定会 ...

  9. python做excel麻烦_高效办公必备:别人通宵做的 Excel,我用Python 半小时搞定!

    原标题:高效办公必备:别人通宵做的 Excel,我用Python 半小时搞定! 最近经常听到周围的人抱怨:"工作忙,在加班--" 不知不觉,当代职场人早就被"996&qu ...

最新文章

  1. Python操作MySQL之SQLAlchemy
  2. nav 计算机网络_CTO下载-计算机网络课件(配套韩立刚老师课程).ppt
  3. [分享]极富挑战性的大公司面试的智力题
  4. priority case语句
  5. VS工程切换cuda版本
  6. 远程网络教育计算机统考试题及答案,2019年电大远程网络教育计算机应用基础统考题库真题试题附全答案...
  7. 很多朋友问做自媒体的意义是什么?
  8. Java实验9 T5. 给当前的类文件添加行号拷贝到txt文件
  9. 如何正确地逛Github?
  10. Caliburn.Micro WPF教程——入门
  11. YApi接口平台-接口挡板
  12. 手机浏览器调用摄像头扫码
  13. 数据结构应用题大题笔记
  14. MySQL技能树学习体验及期望
  15. 警告: Failed to register object [StandardEngine[Catalina].StandardHost[localhost].StandardContext[/Qia
  16. 网联最终落地,如何影响第三方支付机构、银联等?
  17. 基于STM32F103芯片实现LED灯闪烁
  18. 使用NPOI设置Excel表的单元格背景颜色
  19. Linux debug 常用命令
  20. 指定搜索词的分词方法——elasticsearch

热门文章

  1. CSS学习之display属性与浮动
  2. PHP-企业微信服务器回调配置
  3. mysql经典基础语录
  4. windows7系统10个常用技巧概述
  5. matplotlib多种图的绘制
  6. 把项目移到另外一台电脑的新手配置教程
  7. Kafka消费过程分析
  8. Flash媒体服务器的强化指南
  9. Django框架学习20--模板变量,模板标签,模板过滤器及自定义模板过滤器,自定义模板标签
  10. Android Studio中R文件错误的解决办法