Seaborn绘图

Posted 莫失莫忘Lawlite

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Seaborn绘图相关的知识,希望对你有一定的参考价值。

Seaborn绘图

一、介绍与安装

1、介绍

  • 官网:http://seaborn.pydata.org/index.html
  • Github: https://github.com/mwaskom/seaborn
  • Seaborn 其实是在matplotlib的基础上进行了更高级的 API 封装,从而使得作图更加容易
  • 在大多数情况下使用seaborn就能做出很具有吸引力的图,而使用matplotlib就能制作具有更多特色的图。应该把Seaborn视为matplotlib的补充

2、安装

  • 直接 pip3 install seaborn即可

二、分布图

1、distplot

  • 导入包
#-*- coding: utf-8 -*-
import numpy as np
import pandas as pd
import matplotlib as mpl
import matplotlib.pyplot as plt
import seaborn as sns
#%matplotlib inline  # 为了在jupyter notebook里作图,需要用到这个命令
  • 加载 seaborn中的数据集:tips = sns.load_dataset('tips')
  • 分布图
    • kde是高斯分布密度图,绘图在0-1之间
    • hist是否画直方图
    • rug在X轴上画一些分布线
    • fit可以制定某个分布进行拟合
    • label legend时的值
    • axlabel制定横轴的说明
sns.distplot(tips['total_bill'], bins=None, hist=True, kde=False, rug=True, fit=None, 
            hist_kws=None, kde_kws=None, rug_kws=None, 
            fit_kws=None, color=None, vertical=False, 
            norm_hist=False, axlabel=None, label=None, ax=None)
sns.plt.show()
  • 拟合分布
    • 这里使用了gamma分布拟合
from scipy import stats
sns.distplot(tips.total_bill, fit=stats.gamma, kde=False)
sns.plt.show()

2、kdeplot

  • 高斯概率密度图
    • data2可以是二维的分布
    • shade是否填充
    • kernel核函数,还有很多核函数,比如cos, biw
    • cumulative累积的作图,最后的值应该是接近1
    • gridsize多少个点估计
    ax = sns.kdeplot(tips['total_bill'], data2=tips.tip, shade=False, vertical=False, 
                    kernel="gau", bw="scott", 
                    gridsize=100, cut=3, clip=None, 
                    legend=True, cumulative=False, 
                    shade_lowest=True, ax=None)
    sns.plt.show()

二、pairplot

1、两两作图

  • iris 为例
    • data: DataFrame格式的数据
    • hue: label类别对应的column name
    • vars: 指定feature的列名
    • kind: 作图的方式,可以是reg或scatter
    • diag_kind: 对角线作图的方式,可以是hist或kde
    iris = sns.load_dataset('iris')
    g = sns.pairplot(iris, hue='species', hue_order=None, palette=None, 
                     vars=list(iris.columns[0:-1]), 
                     x_vars=None, y_vars=None, 
                     kind="reg", diag_kind="hist", 
                     markers=['o','s','D'], size=1.5, aspect=1, 
                     dropna=True, plot_kws=None, 
                     diag_kws=None, grid_kws=None)
    sns.plt.show()

三、stripplot和swarmplot

1、stripplot

  • tips为例,查看每天的数据信息
    • x: X轴数据
    • y: Y轴数据
    • hue: 区分不同种类数据的column name
    • data: DataFrame类型数据
    • jitter: 将数据分开点,防止重叠
    tips = sns.load_dataset('tips')
    ax = sns.stripplot(x='day', y='total_bill', hue=None, data=tips, order=None, 
                      hue_order=None, jitter=True, 
                      split=False, orient=None, 
                      color=None, palette=None, size=5, 
                      edgecolor="gray", linewidth=0, 
                      ax=None)

  • 查看关于性别消费的信息
    ax = sns.stripplot(x='sex', y='total_bill', hue='day', data=tips, order=None, 
                      hue_order=None, jitter=True, 
                      split=False, orient=None, 
                      color=None, palette=None, size=5, 
                      edgecolor="gray", linewidth=0, 
                      ax=None)

2、swarmplot

  • 与stripplot类似,只是数据点不会重叠 (适合小数据量)
    tips = sns.load_dataset('tips')
    ax = sns.swarmplot(x='sex', y='total_bill', hue='day', data=tips)
    sns.plt.show()

四、boxplot

1、boxplot示意图

  • 函数
    • x, y:指定X轴,Y轴的columns name值
    • hue: 指定要区分的类别
    tips = sns.load_dataset('tips')
    ax = sns.boxplot(x='day', y='total_bill', hue=None, data=tips, order=None, 
                    hue_order=None, orient=None, 
                    color=None, palette=None, 
                    saturation=.75, width=.8, 
                    fliersize=5, linewidth=None, 
                    whis=1.5, notch=False, ax=None)
    sns.plt.show()


- 可以和上面的stripplot一起用

    tips = sns.load_dataset('tips')
    ax = sns.boxplot(x='day', y='total_bill', hue=None, data=tips, order=None, 
                    hue_order=None, orient=None, 
                    color=None, palette=None, 
                    saturation=.75, width=.8, 
                    fliersize=5, linewidth=None, 
                    whis=1.5, notch=False, ax=None)
    sns.stripplot(x='day', y='total_bill', hue=None, data=tips, order=None, 
                 hue_order=None, jitter=True, split=False, 
                 orient=None, color=None, palette=None, 
                 size=5, edgecolor="gray", linewidth=0, 
                 ax=None)
    sns.plt.show()

五、jointplot

1、jointplot

  • 联合作图
    • kind: 有scatter” | “reg” | “resid” | “kde” | “hex
    tips = sns.load_dataset('tips')
    from scipy import stats
    g = sns.jointplot(x='total_bill', y='tip',
                      data=tips, kind="reg", 
                      stat_func=stats.pearsonr, 
                      color=None, size=6, ratio=5, 
                      space=.2, dropna=True, xlim=None, 
                      ylim=None, joint_kws=None, 
                      marginal_kws=None, annot_kws=None)
    sns.plt.show()

  • 可以在基础上再作图
    • plot_joint就是在联合分布上作图
    • plot_marginals就是在边缘分布上再作图
    g = (sns.jointplot(x='total_bill', y='tip',data=tips).plot_joint(sns.kdeplot))

六、violinplot

1、小提琴图,和boxplot很像

  • 对称的kde图
  • 中间的白点是中位数,黑色粗线对应分位数

  • inner: 指定图里面用什么划分,有"box", "quartile", "point", "stick", None
    • quartile为四分位数划分
    • stick很像rug,就是可以看出密度情况
  • scale: 缩放每个图对应的area, 取值有 "area", "count", "width"
    • area指定每个有相同的area
    • count会按数量缩放(数量少的就比较窄扁
    tips = sns.load_dataset('tips')
    ax = sns.violinplot(x='day', y='total_bill', 
                        hue='smoker', data=tips, order=None, 
                        hue_order=None, bw="scott", 
                        cut=2, scale="area", 
                        scale_hue=True, gridsize=100, 
                        width=.8, inner="quartile", 
                        split=False, orient=None, 
                        linewidth=None, color=None, 
                        palette='muted', saturation=.75, 
                        ax=None) 
    sns.plt.show()

七、pointplot, bar

1、pointplot

  • 点图
    • estimator:点的取值是,默认是np.mean
    tips = sns.load_dataset('tips')
    sns.pointplot(x='time', y='total_bill', hue='smoker', data=tips, order=None, 
                 hue_order=None, estimator=np.mean, ci=95, 
                 n_boot=1000, units=None, markers="o", 
                 linestyles="-", dodge=False, join=True, 
                 scale=1, orient=None, color=None, 
                 palette=None, ax=None, errwidth=None, 
                 capsize=None)
    sns.plt.show()

2、barplot

  • 条形图
    • y轴是mean value,和点图其实差不多
    tips = sns.load_dataset('tips')
    sns.barplot(x='day', y='total_bill', hue='sex', data=tips, order=None, 
               hue_order=None, estimator=np.mean, ci=95, 
               n_boot=1000, units=None, orient=None, 
               color=None, palette=None, saturation=.75, 
               errcolor=".26", errwidth=None, capsize=None, 
               ax=None)
    sns.plt.show()

3、countplot

    tips = sns.load_dataset('tips')
    sns.countplot(x='day', hue='sex', data=tips)
    sns.plt.show()  

八、factorplot

1、可以通过这个函数绘制以上几种图

  • 指定kind即可,有point, bar, count, box, violin, strip
  • rowcol指定绘制的行数和列数,给出一个种类类型的列名即可
    titanic = sns.load_dataset('titanic')
    sns.factorplot(x='age', y='embark_town', 
                   hue='sex', data=titanic,
                   row='class', col='sex', 
                   col_wrap=None, estimator=np.mean, ci=95, 
                   n_boot=1000, units=None, order=None, 
                   hue_order=None, row_order=None, 
                   col_order=None, kind="box", 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)
    sns.plt.show()

九、heatmap

1、heatmap

    flight = sns.load_dataset('flights')
    flights = flight.pivot('month','year','passengers')
    sns.heatmap(flights, annot=True, fmt='d')
    sns.plt.show()

十、时序绘图

1、tsplot

  • condition: 和hue差不多,指定类别
  • estimator: 默认为np.mean
    gammas = sns.load_dataset('gammas')
    sns.tsplot(data=gammas, time='timepoint', unit='subject', 
               condition='ROI', value='BOLD signal', 
               err_style="ci_band", ci=68, interpolate=True, 
               color=None, estimator=np.mean, n_boot=5000, 
               err_palette=None, err_kws=None, legend=True, 
               ax=None)
    sns.plt.show()

Reference

以上是关于Seaborn绘图的主要内容,如果未能解决你的问题,请参考以下文章

数据可视化Seaborn:初探

seaborn使用Catplot函数可视化水平小提琴图(Make Horizontal Violin Plot with Catplot in Seaborn)

seaborn使用violinplot函数可视化水平小提琴图(Make Horizontal Violin Plot with violinplot in Seaborn)

使用seaborn分割不同范围的小提琴图

seaborn 中的一半(不分裂!)小提琴情节

seaborn使用Catplot函数可视化分组小提琴图( Grouped Violinplot with Seaborn Catplot)并保存可视化结果