如何利用Seaborn绘制热力图?

如何利用Seaborn绘制热力图?

这是本学期在大数据哲学与社会科学实验室做的第八次分享了。

第一次分享的是:

第二次分享的是:

第三次分享的是:

第四次分享的是:

第五次分享的是:

第六次分享的是:

第七次分享的是:

本次分享的是“如何利用Seaborn绘制热力图?”

1. Seaborn简介

Seaborn是在matplotlib的基础上进行了更高级的API封装,使得作图更加容易,不需要经过大量的调整就能使你的图变得精致。

Seaborn官网:

https://seaborn.pydata.org/

Seaborn安装:

pip install seaborn

Seaborn升级:

pip install --upgrade seaborn

显示Seaborn信息:

pip show Seaborn
Name: seaborn
Version: 0.11.1
Summary: seaborn: statistical data visualization
Home-page: https://seaborn.pydata.org
Author: Michael Waskom
Author-email: mwaskom@nyu.edu
License: BSD (3-clause)
Location: c:\programdata\anaconda3\lib\site-packages
Requires: numpy, scipy, matplotlib, pandas
Required-by:
(base) PS D:\Users\Administrator>

2. 利用Seaborn绘制热力图

热力图 就是用颜色深浅来表示数值大小的图像。

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

heatmap的API如下所示:

def 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
):

2.1 展示列联表

列联表是根据多个类别变量来对观测值进行计数的表。该表的行和列对应于这些类别变量。

本案例采用的数据集是Seaborn中内置的flights航班数据集,dataframe中的数据代表了1949年-1960年每个月的航班乘客数量。

year   1949  1950  1951  1952  1953  1954  1955  1956  1957  1958  1959  1960
month                                                                        
Jan     112   115   145   171   196   204   242   284   315   340   360   417
Feb     118   126   150   180   196   188   233   277   301   318   342   391
Mar     132   141   178   193   236   235   267   317   356   362   406   419
Apr     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
Jun     135   149   178   218   243   264   315   374   422   435   472   535
Jul     148   170   199   230   264   302   364   413   465   491   548   622
Aug     148   170   199   242   272   293   347   405   467   505   559   606
Sep     136   158   184   209   237   259   312   355   404   404   463   508
Oct     119   133   162   191   211   229   274   306   347   359   407   461
Nov     104   114   146   172   180   203   237   271   305   310   362   390
Dec     118   140   166   194   201   229   278   306   336   337   405   432

Seaborn的数据集合:

https://github.com/mwaskom/seaborn-data

import seaborn as sns
import matplotlib.pyplot as plt

data = sns.load_dataset('flights'). \
    pivot(index='month', columns='year', values='passengers')
sns.heatmap(data=data)
plt.show()

热力图的右侧是 颜色带,上面代表了数值到颜色的映射,数值由小到大对应色彩由暗到亮。

从上面的heatmap,我们可以得到两层信息,一是随着时间的推移,飞机的乘客数量是在逐步增多的,二是航班的乘坐旺季在七月和八月份。下面就具体的参数进行演示。

cmap:设置颜色带的色系

有关色带的配置见图文:如何利用colormap让你的图表与众不同?

import seaborn as sns
import matplotlib.pyplot as plt

data = sns.load_dataset('flights'). \
    pivot(index='month', columns='year', values='passengers')
sns.heatmap(data=data, cmap='RdBu_r')
plt.show()

annot:是否显示数值注释

数值注释默认显示的是科学记数法的数值,我们得把数值进行格式化,这就用到了下面的参数。

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

import seaborn as sns
import matplotlib.pyplot as plt

data = sns.load_dataset('flights'). \
    pivot(index='month', columns='year', values='passengers')
sns.heatmap(data=data, cmap='RdBu_r', annot=True, fmt='d')
plt.show()

linewidths:控制每个小方格之间的间距

import seaborn as sns
import matplotlib.pyplot as plt

data = sns.load_dataset('flights'). \
    pivot(index='month', columns='year', values='passengers')
sns.heatmap(data=data, cmap='RdBu_r', annot=True,
            fmt='d', linewidths=0.3)
plt.show()

linecolor:控制分割线的颜色

import seaborn as sns
import matplotlib.pyplot as plt

data = sns.load_dataset('flights'). \
    pivot(index='month', columns='year', values='passengers')
sns.heatmap(data=data, cmap='RdBu_r', annot=True,
            fmt='d', linewidths=0.3, linecolor='gray')
plt.show()

cbar_kws:关于颜色带的设置

import seaborn as sns
import matplotlib.pyplot as plt

data = sns.load_dataset('flights'). \
    pivot(index='month', columns='year', values='passengers')
sns.heatmap(data=data, cmap='RdBu_r', annot=True,
            fmt='d', linewidths=0.3, linecolor='gray',
            cbar_kws={'orientation': 'horizontal'})
plt.show()

2.2 展示相关系数矩阵

所用数据集mtcars.csv记录了32种不同品牌的轿车的11个属性。

数据来源:

https://gist.github.com/seankross/a412dfbd88b3db70b74b

皮尔逊相关系数(Pearson Correlation)是衡量向量相似度的一种方式。

这个系数在-1~1之间波动,0表示完全无关,1表示完全正相关,-1表示完全负相关。

对相关的通俗理解可以看图文:内积与相关

上面数据计算出来的相关系数矩阵如下:

import seaborn as sns
import matplotlib.pyplot as plt
import pandas as pd

# 确保正常显示中文+负号
plt.rcParams['font.sans-serif'] = ['Simhei']
plt.rcParams['axes.unicode_minus'] = False
plt.figure(figsize=(12, 10), dpi=70)

df = pd.read_csv('.\data\mtcars.csv')
pd.set_option('display.max_columns', None)

name = ["汽车名称", "英里/加仑", "气缸数量", "排量", "总马力",
        "驱动轴比", "重量", "1/4英里所用时间", "引擎",
        "变速器", "前进档数", "化油器数量"]
df.columns = name
mat = df.corr(method='pearson')
sns.heatmap(data=mat, cmap='RdYlGn', annot=True)

plt.title('mtcars数据集的相关性矩阵', fontsize=22)
plt.xticks(fontsize=12  # 字体大小
           , rotation=45  # 字体是否进行旋转
           , horizontalalignment='right'  # 刻度的相对位置
           )
plt.yticks(fontsize=12)
plt.show()

2.3 成对分析图

成对分析图 是以图像形式分析多个变量之间相关性的图像,是相关矩阵图的具体化。

我们可以使用散点图或者带最佳拟合线的散点图来描述变量两两之间的关系。但当我们有着探索多个特征两两之间关系的需求时,一一绘制图像的效率比较低下,因此我们就可以使用成对分析图。它是一种类关系矩阵的绘图方式,一次性绘制出所有特征之间的相关图像。

def 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=False,
    plot_kws=None, diag_kws=None, grid_kws=None, size=None,
):

本案例采用的数据集是Seaborn中内置的iris鸢尾花数据集。

数据集内包含 3 类共 150 条记录,每类各 50 个数据,每条记录都有 4 项特征:花萼长度、花萼宽度、花瓣长度、花瓣宽度,可以通过这4个特征预测鸢尾花卉属于山鸢尾(iris-setosa),杂色鸢尾(iris-versicolour),维吉尼亚鸢尾(iris-virginica)中的哪一品种。

import seaborn as sns
import matplotlib.pyplot as plt

sns.set_style('white', {'font.sans-serif': ['simhei', 'Arial']})
data = sns.load_dataset('iris')
data.columns = ["花萼长", "花萼宽", "花瓣长", "花瓣宽", "种类"]
kind_dict = {
    "setosa": "山鸢尾",
    "versicolor": "杂色鸢尾",
    "virginica": "维吉尼亚鸢尾"
}
data["种类"] = data["种类"].map(kind_dict)
sns.pairplot(data=data)
plt.show()

可以看到对角线上是各个属性的直方图(分布图),而非对角线上是两个不同属性之间的相关图,从图中我们发现,花瓣的长度和宽度之间以及萼片的长短和花瓣的长、宽之间具有比较明显的相关关系。

  • kind:用于控制非对角线上的图的类型,可选"scatter"(散点图)与"reg"(回归图)
  • diag_kind:控制对角线上的图的类型,可选"hist"(直方图)与"kde"(核密度估计图)

sns.pairplot(data=data, kind='reg', diag_kind='kde')
plt.show()

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

那对于不同种类的花,其花萼和花瓣有什么比较鲜明的特征吗?我们通过hue参数把不同种类的花区分开,进行进一步分析。

hue:按照某个字段进行分类

sns.pairplot(data=data, hue='种类')
plt.show()

我们可以从经过hue分类后的pairplot中发现,不论是从对角线上的分布图还是从分类后的散点图,都可以看出对于不同种类的花,其萼片长、花瓣长、花瓣宽的分布差异较大,换句话说,这些属性是可以帮助我们去识别不同种类的花的。

比如,对于萼片、花瓣长度较短,花瓣宽度较窄的花,那么它大概率是山鸢尾。

当然,可以通过 palette 参数来调出自己想要的颜色

palette:控制色调

sns.pairplot(data, hue='种类', palette="husl")
plt.show()

markers:控制散点的样式

sns.pairplot(data, hue='种类', markers=["*", "s", "D"])
plt.show()

当我们想单独研究某两个(或多个)变量的关系时,我们只需要通过vars参数指定你想研究的变量

vars,x_vars,y_vars:选择数据中的特定字段,以list形式传入

#单独用vars参数选择"花萼长 "和"花瓣长"两种属性
sns.pairplot(data, hue='种类', vars=["花萼长", "花瓣长"])
plt.show()

# 用x_vars和 y_vars参数指定
# 需要注意的是,x_vars和y_vars要同时指定
sns.pairplot(data, x_vars=["花萼长", "花瓣宽"], y_vars=["花萼宽", "花瓣长"])
plt.show()

更多的样式可以通过plot_kwsdiag_kws来进行控制

plot_kws:用于控制非对角线上的图的样式

diag_kws:用于控制对角线上图的样式

sns.pairplot(data, diag_kind="kde", markers="s",
             plot_kws=dict(s=50, edgecolor="w", color="g", alpha=.5),
             diag_kws=dict(shade=True, color="r"))
plt.show()

参考图文:

  • https://www.jianshu.com/p/6e18d21a4cad
  • https://zhuanlan.zhihu.com/p/96040773
  • https://zhuanlan.zhihu.com/p/98729226

(0)

相关推荐

  • Python数据可视化

    Seaborn是一个很好用的python数据可视化包.汇总一下之前做数据可视化时的一些注意事项和技巧. Seaborn为什么有的数据可视化给人感觉起来很好看很舒服,其实涉及到Seaborn的一些细节操 ...

  • Seaborn常用的10种数据分析图表

    seaborn内置了十几个示例数据集,通过load_dataset函数可以调用.其中包括常见的泰坦尼克.鸢尾花等经典数据集. 作者:Python课堂来源:今日头条|2020-08-10 06:16   ...

  • [数据可视化]Seaborn简单介绍

    什么是SeabornSeaborn是基于matplotlib的图形可视化python包.它提供了一种高度交互式界面,便于用户能够做出各种有吸引力的统计图表.Seaborn是在matplotlib的基础 ...

  • 数据分析入门系列教程-常用图表

    作者:周萝卜 来源:萝卜大杂烩 今天我们来学习下数据可视化,其实在前面的章节中,我们也接触到了一些数据可视化的知识,在分析数据集的时候,有效的可视化图表,可以帮助我们更好的了解数据. 常用的可视化图表 ...

  • Seaborn常见绘图总结

    以前粗略的学习过Matplotlib绘图.Pandas绘图(这里是pandas的常见绘图总结),但是都未深入的去学习过,一遇到问题就翻文档,效率低下.听"他们"说matplotli ...

  • Python数据可视化库seaborn的使用总结

    seaborn是python中的一个非常强大的数据可视化库,它集成了matplotlib,下图为seaborn的官网,如果遇到疑惑的地方可以到官网查看.http://seaborn.pydata.or ...

  • 【量化】seaborn在金融数据可视化中的应用

    <python与量化投资从基础到实战>学习笔记tips:如果没时间阅读,可收藏本文或者直接滑动到文末获取本项目代码下载链接 seaborn库是以matplotlib为基础,同时支持nump ...

  • 利用Python绘制关系网络图

    我们在做数据可视化时,要展现多个元素之间的相互关系时(比如人物关系图),常会用到网络图. 今天我们就分享一个在 Python 里绘制网络图的库:NetworkX,并显示它的基本操作. 一.Networ ...

  • 如何利用pyecharts绘制酷炫的桑基图?

    什么是桑基图 桑基图(Sankey diagram),即桑基能量分流图,也叫桑基能量平衡图.它是一种特定类型的流程图,核心在于展示数据的流转,图中延伸的分支的宽度对应数据流量的大小,通常应用于能源.材 ...

  • 技术贴 | 利用graphpad绘制多指标的ROC曲线

    本文由阿童木根据实践经验而整理,希望对大家有帮助. 原创微文,欢迎转发转载. 导读 ROC曲线(receiver operating characteristic curve,简称ROC曲线),以真阳 ...

  • 如何利用pyecharts绘制炫酷的关系网络图?

    如何利用pyecharts绘制炫酷的关系网络图 这是本学期在大数据哲学与社会科学实验室做的第六次分享了. 第一次分享的是: 如何利用"wordcloud+jieba"制作中文词云? ...

  • 如何使用seaborn绘制组合图

    昨天教程   股评师分析报告文本情感分析预测股价 最后绘制的图片 横坐标都是一样的,我想将价格与情感得分合并到一个图中,这样更方便查看看趋势走势是否一致性.如下图 今日主要是学习如何将共享某一坐标轴的 ...

  • 572.Office技巧:如何利用PPT绘制一张简易的中秋贺卡?

    PPT技巧:如何利用PPT绘制一张简易的中秋贺卡? 今年的国庆和中秋一起过,节日气氛甚是浓厚,记得前几年牛闪闪也教过大家如何用PPT绘制中秋贺卡,今年我们继续,教教大家如何绘制一张简易的中秋贺卡. 具 ...

  • 使用python的seaborn绘制折线图与柱状图的组合图

    前言 代码 结果 前言 今天入职,小组长给我们布置了数据可视化的作业,让大家浏览一个可视化系统,然后找到三个结论,其实很简单,但是自己又拓展一点.然后需要画一个折线图与柱状图的组合图,下面是我的代码和 ...

  • Python之seaborn:利用seaborn的color_palette()函数改变绘图界面风格

    Python之seaborn:利用seaborn的color_palette()函数改变绘图界面风格 利用seaborn的color_palette()函数改变绘图界面风格 实现结果 sns.set_ ...

  • Python之pyecharts:利用pyecharts绘制地图十多个地区流动轨迹动态图

    Python之pyecharts:利用pyecharts绘制地图十多个地区流动轨迹动态图 相关文章 Python之pyecharts:利用pyecharts绘制地图十多个地区流动轨迹动态图 Pytho ...