超详细Seaborn绘图 ——(一)barplot
Seaborn是基于matplotlib的图形可视化python包。它提供了一种高度交互式界面,便于用户能够做出各种有吸引力的统计图表。Seaborn是在matplotlib的基础上进行了更高级的API封装,从而使得作图更加容易,在大多数情况下使用seaborn能做出很具有吸引力的图,而使用matplotlib就能制作具有更多特色的图。应该把Seaborn视为matplotlib的补充,而不是替.
Seaborn是基于matplotlib的图形可视化python包。它提供了一种高度交互式界面,便于用户能够做出各种有吸引力的统计图表。Seaborn是在matplotlib的基础上进行了更高级的API封装,从而使得作图更加容易,在大多数情况下使用seaborn能做出很具有吸引力的图,而使用matplotlib就能制作具有更多特色的图。应该把Seaborn视为matplotlib的补充,而不是替代物。同时它能高度兼容numpy与pandas数据结构以及scipy与statsmodels等统计模式。
一、预备工作
先做好使用前的预备工作:
看下所使用的version
import seaborn as sns
sns.__version__
导入相关的模块
import matplotlib.pyplot as plt
import seaborn as sns
import numpy as np
import pandas as pd
%matplotlib inline
# 显示正负号与中文不显示问题
plt.rcParams['axes.unicode_minus'] = False
sns.set_style('darkgrid', {'font.sans-serif':['SimHei', 'Arial']})
# 去除部分warning
import warnings
warnings.filterwarnings('ignore')
二、barplot
(一)语法
seaborn.barplot(x=None, y=None, hue=None, data=None, order=None, hue_order=None,\
estimator=<function mean>,ci=95, n_boot=1000, units=None, orient=None,\
color=None, palette=None, saturation=0.75,\
errcolor='.26', errwidth=None, capsize=None, dodge=True, ax=None, **kwargs)
注意分行
条形图以矩形条的方式展示数据的点估值和置信区间
输入数据的格式可以不同,包括:
- 以列表,numpy array 或者 pandas 中的 Series object 表示的向量。这些向量可以直接传入 x, y, 以及 hue 参数。
- 长表, x 值,y 值和色相变量决定了数据是如何绘制的。
- 宽表,每个列的数值都会被绘制出来.
- 数组或者列表的向量。
大多数情况下,可以使用 numpy 的对象或者 python 的对象,但是用 pandas 对象更好,因为相关的列名会被标注在图标上。 另外,为了控制绘图元素 也可以可以用分类类型来组合不同的变量。
(二)参数详解
-
x
、y
、hue
:< data中的变量名词或者向量 >
data
中用于绘制图表的变量名 -
data
:< DataFrame, 数组, 数组列表 >
是用于绘图的数据集 -
order
、hue_order
:< 字符串列表 >
绘制类别变量的顺序,若没有,则会从数据对象中推断绘图顺序 -
estimator
:< 映射向量 -> 标量 >
统计函数用于估计每个分类纸条中的值 -
ci
:< float or “sd” or None >
估计值周围的置信区间大小。若输入的是sd,会跳过bootstrapping的过程,只绘制数据的标准差;
若输入的是None,不会执行bootstrapping,而且错误条也不会绘制 -
n_boot
:< int >
计算置信区间需要的 Boostrap 迭代次数。 -
units
:< data中的变量名词或向量 >
采样单元的标识符,用于执行多级 bootstrap 并解释重复测量设计。 -
orient
:< “v” 或 “h” >
绘图的方向(垂直或水平)。这通常是从输入变量的数据类型推断出来的,但是可以用来指定“分类”变量是数字还是宽格式数据。 -
color
:< matplotlib color >
作用于所有元素的颜色,或者渐变色的种子。 -
palette
:< palette name, list, or dict >
不同级别的 hue 变量的颜色。 颜色要能被 [color_palette()]解释(seaborn.color_palette.html#seaborn.color_palette “seaborn.color_palette”), 或者一个能映射到 matplotlib 颜色的字典。 -
saturation
:< float >
原始饱和度与绘制颜色的比例。大的色块通常在稍微不饱和的颜色下看起来更好,但是如果希望打印颜色与输入颜色规格完全匹配,请将其设置为1。 -
errcolor
:< matplotlib color >
表示置信区间的线的颜色。 -
errwidth
:< float >
误差条的线的厚度。 -
capsize
:< float >
误差条端部的宽度。 -
dodge
: < 布尔型 >
当使用色调嵌套时,元素是否应该沿分类轴移动。 -
ax
:< matplotlib Axes >
指定一个 Axes 用于绘图,如果不指定,则使用当前的 Axes。 -
kwargs
:< key, value mappings >
其他的关键词参数在绘图时通过 plt.bar 传入。
(三)实例
首先最简单的画个柱形图
plt.figure(dpi=150)
x = ['金融','农业','制造业','新能源']
y = [164, 86, 126, 53]
sns.barplot(x, y)
还可以通过order
改变变量顺序
plt.figure(dpi=150)
x = ['金融','农业','制造业','新能源']
y = [164, 86, 126, 53]
sns.barplot(x, y, order=['金融','制造业','农业','新能源'])
通过saturation
调整饱和度,默认值为0.75
plt.figure(dpi=150)
x = ['金融','农业','制造业','新能源']
y = [164, 86, 126, 53]
sns.barplot(x, y, order=['金融','制造业','农业','新能源'], saturation=0.2)
还可以选用Seaborn的内置数据集来进行可视化处理
首先导入数据集
tips = sns.load_dataset('tips')
tips.head(5)
可以通过tips.info()
查看数据集的一些具体信息
总共有7个特征,244条数据。接下来进行可视化处理
通过添加hue
来绘制一组由两个变量嵌套分组的垂直条形图
plt.figure(dpi=150)
sns.barplot(x = 'day', y = 'tip', data = tips, hue = 'sex')
其中每个柱条的黑色的线条为误差线
误差线源于统计学,表示数据误差(或不确定性)范围,以更准确的方式呈现数据。误差线可以用标准差(standard deviation,SD)、标准误(standard error,SE)和置信区间表示,使用时可选用任意一种表示方法并作相应说明即可。当误差线比较“长”时,一般要么是数据离散程度大,要么是数据样本少。
绘制水平的条形图
plt.figure(dpi=150)
sns.barplot(y = 'day', x = 'tip', data = tips)
要是觉得这个默认的色系不好看,可以使用一个不同的调色盘来绘制图案
plt.figure(dpi=150)
sns.barplot(x = 'size', y = 'tip', data = tips, palette="Blues_d")
对于palette的一些具体说明,会在后续慢慢阐述。
用误差条显示平均值的标准误差
plt.figure(dpi=150)
sns.barplot(x = 'size', y = 'tip', data = tips, palette="Blues_d", ci=95)
还可以个性化误差线(调整线的颜色和厚度)
plt.figure(dpi=150)
sns.barplot(x = 'size', y = 'tip', data = tips, palette="plasma_r", ci=95,
errcolor='yellow', errwidth=2, alpha=0.3)
给误差条增加"端点"
plt.figure(dpi=150)
sns.barplot(x = 'size', y = 'tip', data = tips, palette="plasma_r", ci=95,
errcolor='yellow', errwidth=2, capsize=0.1,alpha=0.3)
在使用hue
后,柱形本身的宽度会发生改变。若想保持柱形原宽度,可以设置dodge=False
plt.figure(dpi=150)
tips["weekend"] = tips["day"].isin(["Sat", "Sun"])
sns.barplot(x="day", y="total_bill", hue="weekend",data=tips, dodge=False)
还可以用plt.bar
中的一些参数
plt.figure(dpi=150)
sns.set_style('white')
sns.barplot(x="day", y="total_bill", data=tips,
linewidth=2.5, facecolor=(1, 1, 1, 0),
errcolor=".2", edgecolor=".2")
更多推荐
所有评论(0)