Python之Seaborn库学习
Seaborn库简介
Seborn是一个基于matplotlib的Python数据可视化库, 它提供了一个高度交互式界面, 用于绘制有吸引力和信息量的统计图形.
Seaborn其实是在matplotlib的基础上进行了更高级的API封装, 从而使得作图更加容易, 在大多数情况下使用seaborn就能做出很具有吸引力的图, 而使用matplotlib就能制作具有更多特色的图. 所以应该把Seaborn视为matplotlib的补充, 而不是替代物. 同时它能高度兼容numpy与pandas以及scipy与statsmodels等科学计算库. 掌握seaborn能很大程度帮助我们更高效的观察数据与图表, 并且更加深入了解它们.
Seaborn其有如下特点:
- 基于matplotlib aesthetics绘图风格, 增加了一些绘图模式;
- 增加调色板功能, 利用色彩丰富的图像揭示您数据中的模式;
- 运用数据子集绘制与比较单变量和双变量分布的功能;
- 运用聚类算法可视化矩阵数据;
- 灵活运用处理时间序列数据;
- 利用网格建立复杂图像集.
Seaborn绘制散点图
参数:
- x, y (names of variables in data or vector data, optional): 输入的x, y 轴变量, 必须是数字. 可以直接传递数据, 或者引用
data
中的列. - hue(name of variables in data or vector data, optional): 将输入的变量分组, 并分别给与不同的颜色, 可以是文字分类列也可以是数字列, 这两者的结果会有所不同.
- size(name of variables in data or vector data, optional): 将输入的变量分组, 并分别给与不同的大小, 可以是文字分类列也可以是数字列, 这两者的结果会有所不同.
- style(name of variables in data or vector data, optional): 将输入的变量分组, 并分别给与不同的标志, 可以是文字分类列也可以是数字列, 但是数字列始终是被认为是分类标志.
- data(DataFrame): 整齐数据框, 其中每一列都是变量, 每一行都是观察值.
- palette (palette name, list, or dict, optional): 调色板, 要应用于hue不同级别的色板, 具体使用可以参考color_palette()
- hue_order(list, optional): hue不同级别色彩出现的详细顺序, 不指定则由数据确定, 当hue变量为数字时不相关.
- hue_norm(tuple or Normalize object, optional): 当hue变量为数值时, 使其归一化以上色.
- sizes(list, dict, or tuple, optional): 当size已经给定了, 决定散点大小可选的list, 或者针对不同的size值给定不同的大小(dict), 当size值为数字时, 同样可以用元组(tuple)决定散点大小的范围.
- size_order(list, optional): 散点大小不同级别的详细顺序. 不指定则由数据确定, 当size变量为数字时不相关.
- size_norm(tuple or Normalize object, optional): 当size变量为数值时, 使其归一化以上色.
- markers(boolean, list, or dictionary, optional): 散点标志, 设置为True则使用默认设置, 或者你可以给定一个marker的list以供选择, 你也可以根据style参数对不同的类别给定不同的marker(dict).
- style_order(list, optional): marker不同级别出现的详细顺序, 不指定则由数据确定, 当style变量为数字时不相关.
- alpha(float): 散点的透明度.
- legend(“brief”, “full”, 或者 False, optional): 如何绘制图例, 如果是”brief”, 则数字的hue和size变量将以均匀的间隔表示(并不会把所有类别的图例都表示出来); 如果是”full”, 则每个类别都会在图例中表示出来; 如果是 False , 则不会绘制图例.
- ax(matplotlib Axes, optional): 在哪个axes上绘制该图, 不填写则使用当前axes.
- kwargs(key, value mappings): 其他关键字参数传递给 matplotlib.axes.Axes.scatter().
这边举几个例子:
这里我使用的是seaborn的官方数据集, 因为国内网络问题, 无法在线加载数据集, 我是下载后使用的, 数据集地址
绘制x为total_bill, y为tip的散点图
1 | import pandas as pd |
绘制出来的图形如下:
按照不同的性别绘制不同的颜色:
1 | sns.scatterplot(x="total_bill", y="tip", data=tips, hue='sex') |
绘制出来的图形如下:
按照不同的size绘制不同的颜色:
1 | sns.scatterplot(x="total_bill", y="tip", data=tips, hue='sex', size='size', legend='full') |
绘制出来的图形如下:
按照是否抽烟绘制不同的marker:
1 | sns.scatterplot(x="total_bill", y="tip", data=tips, hue='sex', size='size', style='smoker') |
绘制出来的图形如下:
Seaborn绘制折线图
seaborn.lineplot(x=None, y=None, hue=None, size=None, style=None, data=None, palette=None, hue_order=None, hue_norm=None, sizes=None, size_order=None, size_norm=None, dashes=True, markers=None, style_order=None, units=None, estimator=’mean’, ci=95, n_boot=1000, seed=None, sort=True, err_style=’band’, err_kws=None, legend=’brief’, ax=None, **kwargs)
参数基本和散点图一样, 但是还是多了一些可用的参数:
- dashes(boolean, list, or dictionary, optional): 确定为不同级别的style绘制什么样的marker. 设置为True将使用默认的dash codes, 或者你可以传递dash codes列表或style变量到dash codes的字典映射. 设置为False将对所有子集使用实线.
- units(long_form_var): 分组变量标识采样单位. 使用时, 将使用适当的方式为每个unit绘制一条单独的线, 但不会添加图例. 当不需要精确的线条身份时, 可用于显示实验重复的分布.
- estimator (name of pandas method or callable or None, optional): 在同一x级别上跨y变量的多个观测值进行聚合的方法. 如果为None, 将绘制所有观测值.
- ci(int or “sd” or None, optional): 与估计量进行汇总时要绘制的置信区间的大小. “sd”表示绘制数据的标准差. 设置为None将跳过引导程序.
- n_boot(int, optional): 用于计算置信区间的引导程序数.
- seed(int, numpy.random.Generator, or numpy.random.RandomState, optional): 种子或随机数生成器, 可重现自举.
- sort(boolean, optional): 如果为True, 则数据将按x和y变量排序, 否则线条将按照它们在数据集中出现的顺序出现.
- err_style(“band” or “bars”, optional): 是否绘制具有半透明误差带或离散误差线的置信区间.
- err_kws(dict of keyword arguments): 其他控制误差线外观的参数, 传递给matplotlib.axes.Axes.fill_between() 或者 matplotlib.axes.Axes.errorbar(), 取决于err_style.
举几个例子:
对于复杂的数据集, 如对相同的x变量值进行多次测量, seaborn中的默认行为是通过绘制平均值和围绕平均值的95%置信区间来聚合每个x值处的多个测量值.
1 | import pandas as pd |
绘制出来的图形如下:
使用自动计算置信区间, 对于较大的数据集, 可能会占用大量时间, 因此可以设置ci=None
来禁用它.
参考资料
[1] Official seaborn tutorial - seaborn 0.10.1 documentation
[2] 10分钟python图表绘制 | seaborn入门(一):distplot与kdeplot - 知乎