seaborn 是 python 中的一个非常强大的数据可视化库,它集成了 matplotlib,下图为 seaborn 的官网,如果遇到疑惑的地方可以到官网查看。http://seaborn.pydata.org/ 从官网的主页我们就可以看出,seaborn 在数据可视化上真的非常强大。
1. 首先我们还是需要先引入库,不过这次要用到的 python 库比较多。
import numpy as np
import pandas as pd
import matplotlib as mpl
import matplotlib.pyplot as plt
import seaborn as sns
2.sns.set_style():不传入参数用的就是 seaborn 默认的主题风格,里面的参数共有五种
darkgrid
whitegrid
dark
white
ticks
我比较习惯用 whitegrid。
3. 下面说一下 seaborn 里面的调色板,我们可以用 sns.color_palette() 获取到这些颜色,然后用 sns.palplot() 将这些色块打印出来。color_palette() 函数还可以传入一些参数
sns.palplot(sns.color_palette(“hls”,n))# 显示出 n 个不同颜色的色块
sns.palplot(sns.color_palette(“Paired”,2n))# 显示出 2n 个不同颜色的色块,且这些颜色两两之间是相近的
sns.palplot(sns.color_palette(“color”))# 由浅入深显示出同一颜色的色块
sns.palplot(sns.color_palette(“color_r”))## 由深入浅显示出同一颜色的色块
sns.palplot(sns.color_palette(“cubehelix”,n))# 显示出 n 个颜色呈线性变化的色块
sns.palplot(sns.cubehelix_palette(k,start=m,rot=n))# 显示出 k 个 start(0,3) 为 m,rot(-1,1) 为 n 的呈线性变化的色块
sns.palplot(sns.light_palette(“color”))# 将一种颜色由浅到深显示
sns.palplot(sns.dark_palette(“color”))# 将一种颜色由深到浅显示
sns.palplot(sns.dark_palette(“color”,reverse=bool))#reverse 的值为 False,则将一种颜色由深到浅显示;若为 True,则将一种颜色由浅到深显示
4.sns.kdeplot(x,y,cmap=pal):绘制核密度分布图。5.sns.distplot(x,kde=bool,bins=n):kde 代表是否进行核密度估计,也就是是否绘制包络线,bins 指定绘制的条形数目。6. 根据均值和协方差绘图:
首先我们要根据均值和协方差获取数据
mean,cov = [m,n],[(a,b),(c,d)]# 指定均值和协方差
data = np.random.multivariate_normal(mean,cov,e)# 根据均值和协方差获取 e 个随机数据
df = pd.DataFrame(data,columns=[“x”,”y”])# 将数据指定为 DataFrame 格式
df
然后绘制图像
sns.jointplot(x=”x”,y=”y”,data=df) #绘制散点图
用 sns.jointplot(x=”x”,y=”y”,data=df) 可以绘制出 x 和 y 单变量的条形图以及 x 与 y 多变量的散点图。
7. 在 jointplot() 函数中传入 kind=“hex”,能够在数据量比较大时让我们更清晰地看到数据的分布比重。
x,y = np.random.multivariate_normal(mean,cov,2000).T
with sns.axes_style(“white”):
sns.jointplot(x=x,y=y,kind=”hex”,color=”c”)
绘制出的图像如下 8.sns.pairplot(df):绘制出各变量之间的散点图与条形图,且对角线均为条形图。在这里我们可以先使用 df = sns.load_dataset(“”) 将 seaborn 中原本带有的数据读入或用 pandas 读取。
9. 绘制回归分析图:这里可以用两个函数 regplot() 和 lmplot(),用 regplot() 更好一些。如果两个变量不适合做回归分析,我们可以传入 x_jitter() 或 y_jitter() 让 x 轴或 y 轴的数据轻微抖动一些,得出较为准确的结果。10.sns.stripplot(x=””,y=””,data=df,jitter=bool):绘制一个特征变量中的多个变量与另一变量关系的散点图,jitter 控制数据是否抖动。11.sns.swarmplot(x=””,y=””,hue=””,data=df):绘制页状散点图,hue 指定对数据的分类,由于在大量数据下,上面的散点图会影响到我们对数据的观察,这种图能够更清晰地观察到数据分布。12.sns.boxplot(x=””,y=””,hue=””,data=df,orient=”h”):绘制盒形图,hue 同样指定对数据的分类。在统计学中有四分位数的概念,第一个四分位记做 Q1,第二个四分位数记做 Q2,第三个四分位数记做 Q3,Q3-Q1 得到的结果 Q 叫做四分位距,如果一个数 n,n 的范围是 n <Q1-1.5Q 或 n >Q3+1.5Q,则称 n 为离群点,也就是不符合数据规范的点,利用盒形图可以很清晰地观察到离群点。如果传入 orient 则画出的盒形图是横向的。13.sns.violinplot(x=””,y=””,data=df,hue=””,split=bool):绘制小提琴图,split 表示是否将两类数据分开绘制,如果为 True,则不分开绘制,默认为 False。14. 还可以将页状散点图和小提琴图在一起绘制,只需将两个绘图命令 inner=”None” 表示去除小提琴图内部的形状。15.sns.barplot(x=””,y=””,hue=””,data=df):按 hue 的数据分类绘制条形图。16.sns.pointplot(x=””,y=””,hue=””,data=df):绘制点图,点图可以更好的描述数据的变化差异。17. 我们还可以传入其他参数:
sns.pointplot(x=”class”,y=”survived”,hue=”sex”,data=titanic,
palette={“male”:”#02ff96″,”female”:”#0980e6″},# 指定曲线的颜色
markers=[“s”,”d”],linestyles=[“-“,”-.”])# 指定曲线的点型和线型
绘制出的图像如下 18.sns.factorplot(x=””, y=””, hue=””, data=df):绘制多层面板分类图。
sns.factorplot(x=”day”,y=”total_bill”,hue=”smoker”,data=tips)
绘制的图像如下 19.sns.factorplot(x=””,y=””,hue=””,data=df,kind=””):kind 中指定要画图的类型。
sns.factorplot(x=”day”,y=”total_bill”,hue=”smoker”,data=tips,kind=”bar”)
sns.factorplot(x=”day”,y=”total_bill”,hue=”smoker”,col=”time”,data=tips,kind=”swarm”)
sns.factorplot(x=”time”,y=”total_bill”,hue=”smoker”,col=”day”,data=tips,kind=”box”,size=5,aspect=0.8) #aspect 指定横纵比
20.sns.factorplot() 的参数:
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。
21.sns.FacetGrid():这是一个很重要的绘图函数。
g = sns.FacetGrid(tips,col=”time”)
g.map(plt.hist,”tip”)
g = sns.FacetGrid(tips,col=”sex”,hue=”smoker”,size=5,aspect=1)
g.map(plt.scatter,”total_bill”,”tip”,alpha=0.3,s=100)#alpha 指定点的透明度,s 指定点的大小
g.add_legend()# 添加图例
g = sns.FacetGrid(tips,col=”day”,size=4,aspect=0.8)
g.map(sns.barplot,”sex”,”total_bill”)
22.sns.PairGrid():将各变量间的关系成对绘制。
iris = sns.load_dataset(“iris”)
g = sns.PairGrid(iris)
g.map(plt.scatter)
23.g.map_diag() 和 g.map_offdiag():绘制对角线和非对角线的图形
g = sns.PairGrid(iris)
g.map_diag(plt.hist) #指定对角线绘图类型
g.map_offdiag(plt.scatter) #指定非对角线绘图类型
g = sns.PairGrid(iris, hue=”species”)
g.map_diag(plt.hist)
g.map_offdiag(plt.scatter)
g.add_legend()
g = sns.PairGrid(iris, vars=[“sepal_length”, “sepal_width”], hue=”species”,size=3)
g.map(plt.scatter)
g = sns.PairGrid(tips, hue=”size”, palette=”GnBu_d”)
g.map(plt.scatter, s=50, edgecolor=”white”)
g.add_legend()
24.sns.heatmap():绘制热度图,热度图可以很清楚看到数据的变化情况以及变化过程中的最大值和最小值。
uniform_data = np.random.rand(3, 3)
print (uniform_data)
heatmap = sns.heatmap(uniform_data)
25. 向 heatmap() 中传入参数 vmin= 和 vmax=。
ax = sns.heatmap(uniform_data,vmin=0.2,vmax=0.5) #超过最大值都是最大值的颜色,小于最小值都是最小值的颜色
26.
normal_data = np.random.randn(3, 3)
print (normal_data)
ax = sns.heatmap(normal_data, center=0) #center 指定右侧图例的中心值
27.
flights = sns.load_dataset(“flights”)
flights = flights.pivot(“month”, “year”, “passengers”)
ax = sns.heatmap(flights, annot=True,fmt=”d”,linewidth=0.5) #annot 指定是否显示数据,fmt 指定数据的显示格式,linewidth 指定数据格子间的距离
28.
ax = sns.heatmap(flights, cmap=”YlGnBu”,cbar=True) #cmap 指定图形颜色,cbar 表示是否绘制右侧图例。