唐宇迪学习笔记4:Python可视化库——Seaborn

目录

一、整体布局风格设置

五种主题风格

1、darkgrid

2、whitegrid

3、dark

4、white

5、ticks

二、风格细节设置

1、指定画图距离轴线的位置

2、指定轴的隐藏与否

3、指定多个风格

 4、指定布局

paper

talk

poster

notebook

三、调色板

分类色板

圆形画板

 1、应用

​2、hls_palette()函数

四、调色板颜色设置

1、使用xkcd颜色来命名颜色

方式1

方式2 

2、连续色板

默认由浅到深

由深到浅

3、cubehelix_palette()调色板

4、light_palette() 和dark_palette()调用定制连续调色板

五、单变量分析绘图

直方图数据

两个变量之间的分布关系

hex图

pairplot():特征的可视化显示

六、回归分析绘图

绘制回归关系

regplot(),推荐

lmplot()

七、多变量分析绘图

八、分类属性绘图

盒图

显示值的集中趋势可以用条形图 

点图可以更好的描述变化差异 

宽形数据

多层面板分类图

kind="bar" 

 kind="swarm"

 kind=“box”

Parameters

九、Facetgrid使用方法

1、实例化FacetGrid

 2、map()函数画图

 3、指标指定 

 4、其他

十、Facetgrid绘制多变量

十一、热度图绘制

  右边调色板进行取值设置(vmin,vmax)

 指定中心值,中心值上下颜色不一样

 将原始数据转化为可支持的矩阵的形式

 将实际的值画到Heatmap当中

指定格与格之间的间距 

指定调色板

调色板隐藏


Seaborn是在Matplotlib库的基础上进行封装,提供画图模板。

import seaborn as ans

Seaborn库的安装:

Windows安装:在Anacoda中Prompt命令行中,pip install seaborn或conda install seaborn

M1mac安装:在命令行,pip3 install seaborn

一、整体布局风格设置

import seaborn as sns
import numpy as np
import matplotlib as mpl
import matplotlib.pyplot as plt
%matplotlib inline
def sinplot(flip=1):x = np.linspace(0, 14, 100)for i in range(1, 7):plt.plot(x, np.sin(x + i * .5) * (7 - i) * flip)

五种主题风格

1、darkgrid

sns.set_style("darkgrid")
data = np.random.normal(size=(20, 6)) + np.arange(6) / 2
sns.boxplot(data=data)

2、whitegrid

sns.set_style("whitegrid")
data = np.random.normal(size=(20, 6)) + np.arange(6) / 2
sns.boxplot(data=data)

3、dark

sns.set_style("dark")
sinplot()

4、white

sns.set_style("white")
sinplot()

5、ticks

sns.set_style("ticks")
sinplot()

 去掉上面和右边的线

sinplot()
sns.despine()

二、风格细节设置

1、指定画图距离轴线的位置

sns.violinplot(data)
sns.despine(offset=10)

2、指定轴的隐藏与否

left、right、top、bottom

sns.set_style("whitegrid")
sns.boxplot(data=data, palette="deep")
sns.despine(left=True)

3、指定多个风格

with sns.axes_style("darkgrid"):plt.subplot(211)sinplot()
plt.subplot(212)
sinplot(-1)

 4、指定布局

sns.set()#设置默认值
  • paper

sns.set_context("paper")
plt.figure(figsize=(8, 6)) #画图大小
sinplot()

  • talk

sns.set_context("talk")
plt.figure(figsize=(8, 6))
sinplot()

  • poster

sns.set_context("poster")
plt.figure(figsize=(8, 6))
sinplot()

  • notebook

sns.set_context("notebook", font_scale=1.5, rc={"lines.linewidth": 2.5})
sinplot()

三、调色板

  • 颜色很重要
  • color_palette()能传入任何Matplotlib所支持的颜色
  • color_palette()不写参数则默认颜色
  • set_palette()设置所有图的颜色

调用调色板

import numpy as np
import seaborn as sns
import matplotlib.pyplot as plt
%matplotlib inline
sns.set(rc={"figure.figsize": (6, 6)})

分类色板

6个默认的颜色循环主题: deep, muted, pastel, bright, dark, colorblind

current_palette = sns.color_palette()
sns.palplot(current_palette)

圆形画板

当你有六个以上的分类要区分时,最简单的方法就是在一个圆形的颜色空间中画出均匀间隔的颜色(这样的色调会保持亮度饱和度不变)。这是大多数的当他们需要使用比当前默认颜色循环中设置的颜色更多时的默认方案。

最常用的方法是使用hls的颜色空间,这是RGB值的一个简单转换。

sns.palplot(sns.color_palette("hls", 8))

 1、应用

data = np.random.normal(size=(20, 8)) + np.arange(8) / 2
sns.boxplot(data=data,palette=sns.color_palette("hls", 8))

2、hls_palette()函数

用来控制颜色的亮度和饱和

  • l-亮度 lightness
  • s-饱和 saturation
sns.palplot(sns.hls_palette(8, l=.7, s=.9))

sns.palplot(sns.color_palette("Paired",8))

四、调色板颜色设置

1、使用xkcd颜色来命名颜色

xkcd包含了一套众包努力的针对随机RGB色的命名。产生了954个可以随时通过xdcd_rgb字典中调用的命名颜色。

方式1

plt.plot([0, 1], [0, 1], sns.xkcd_rgb["pale red"], lw=3)
plt.plot([0, 1], [0, 2], sns.xkcd_rgb["medium green"], lw=3)
plt.plot([0, 1], [0, 3], sns.xkcd_rgb["denim blue"], lw=3)

方式2 

colors = ["windows blue", "amber", "greyish", "faded green", "dusty purple"]
sns.palplot(sns.xkcd_palette(colors))

2、连续色板

色彩随数据变换,比如数据越来越重要则颜色越来越深。

  • 默认由浅到深

sns.palplot(sns.color_palette("Blues"))

  •  由深到浅

sns.palplot(sns.color_palette("BuGn_r"))

3、cubehelix_palette()调色板

色调线性变换,指定区间(start=?,rot=?)

sns.palplot(sns.color_palette("cubehelix", 8))

sns.palplot(sns.cubehelix_palette(8, start=.5, rot=-.75))

4、light_palette() 和dark_palette()调用定制连续调色板

sns.palplot(sns.light_palette("green"))
sns.palplot(sns.dark_palette("purple"))
sns.palplot(sns.light_palette("navy", reverse=True))

渐变色 

x, y = np.random.multivariate_normal([0, 0], [[1, -.5], [-.5, 1]], size=300).T
pal = sns.dark_palette("green", as_cmap=True)
sns.kdeplot(x, y, cmap=pal);

 

五、单变量分析绘图

%matplotlib inline
import numpy as np
import pandas as pd
from scipy import stats, integrate
import matplotlib.pyplot as pltimport seaborn as sns
sns.set(color_codes=True)
np.random.seed(sum(map(ord, "distributions")))

直方图数据

x = np.random.normal(size=100)
sns.distplot(x,kde=False)

kde密度估计

自己指定bins 

sns.distplot(x, bins=20, kde=False)

数据分布情况

x = np.random.gamma(6, size=200)
sns.distplot(x, kde=False, fit=stats.gamma)

fit当前统计指标

 根据均值和协方差生成数据

mean, cov = [0, 1], [(1, .5), (.5, 1)]
data = np.random.multivariate_normal(mean, cov, 200)
df = pd.DataFrame(data, columns=["x", "y"])
df

两个变量之间的分布关系

最好用散点图。

jointplot():既可以把关系画出来,也可以把自身之间分布情况画出来。

sns.jointplot(x="x", y="y", data=df);

hex图

当数据量比较大时,方便分辨那块数据多(kind="hex")。颜色越深,值越多。

x, y = np.random.multivariate_normal(mean, cov, 1000).T
with sns.axes_style("white"):sns.jointplot(x=x, y=y, kind="hex", color="k")

pairplot():特征的可视化显示

可以显示多个特征两两之间的关系。

对角线上:单个变量分布的情况

非对角线:两两特征散点分布情况。

iris = sns.load_dataset("iris")
sns.pairplot(iris)

六、回归分析绘图

%matplotlib inline
import numpy as np
import pandas as pd
import matplotlib as mpl
import matplotlib.pyplot as pltimport seaborn as sns
sns.set(color_codes=True)np.random.seed(sum(map(ord, "regression")))tips = sns.load_dataset("tips")tips.head()

绘制回归关系

  • regplot(),推荐

  • lmplot()

 当数据不太适合做回归分析时,对数据加上小的抖动。

七、多变量分析绘图

对类别值进行可视化展示

%matplotlib inline
import numpy as np
import pandas as pd
import matplotlib as mpl
import matplotlib.pyplot as plt
import seaborn as sns
sns.set(style="whitegrid", color_codes=True)np.random.seed(sum(map(ord, "categorical")))
titanic = sns.load_dataset("titanic")
tips = sns.load_dataset("tips")
iris = sns.load_dataset("iris")

问题:重叠是很常见的现象,但是重叠影响观察数据的量。

解决:加jitter属性

八、分类属性绘图

盒图

(统计离群点。)

  • IQR即统计学概念四分位距,第一/四分位与第三/四分位之间的距离
  • N = 1.5IQR 如果一个值>Q3+N或 < Q1-N,则为离群点

显示值的集中趋势可以用条形图 

点图可以更好的描述变化差异 

 

宽形数据

多层面板分类图

kind="bar" 

 kind="swarm"

 kind=“box”

Parameters

  • 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

九、Facetgrid使用方法

FacetGrid:当我们想把数据集中很多子集进行展示时用这个函数。需要构造展示区域。

%matplotlib inline
import numpy as np
import pandas as pd
import seaborn as sns
from scipy import stats
import matplotlib as mpl
import matplotlib.pyplot as pltsns.set(style="ticks")
np.random.seed(sum(map(ord, "axis_grids")))

数据集

1、实例化FacetGrid

指定区域图中包含的信息

 2、map()函数画图

 3、指标指定 

 4、其他

color:颜色改变

jitter:浮动

fit_reg:回归线是否画出True/False

设置布局 

from pandas import Categorical
ordered_days = tips.day.value_counts().index
print (ordered_days)
ordered_days = Categorical(['Thur', 'Fri', 'Sat', 'Sun'])
g = sns.FacetGrid(tips, row="day", row_order=ordered_days,size=1.7, aspect=4,)
g.map(sns.boxplot, "total_bill");

十、Facetgrid绘制多变量

pal = dict(Lunch="seagreen", Dinner="gray")
g = sns.FacetGrid(tips, hue="time", palette=pal, size=5)
g.map(plt.scatter, "total_bill", "tip", s=50, alpha=.7, linewidth=.5, edgecolor="white")
g.add_legend();

g = sns.FacetGrid(tips, hue="sex", palette="Set1", size=5, hue_kws={"marker": ["^", "v"]})
g.map(plt.scatter, "total_bill", "tip", s=100, linewidth=.5, edgecolor="white")
g.add_legend();

with sns.axes_style("white"):g = sns.FacetGrid(tips, row="sex", col="smoker", margin_titles=True, size=2.5)
g.map(plt.scatter, "total_bill", "tip", color="#334488", edgecolor="white", lw=.5);
g.set_axis_labels("Total bill (US Dollars)", "Tip");
g.set(xticks=[10, 30, 50], yticks=[2, 6, 10]);
g.fig.subplots_adjust(wspace=.02, hspace=.02);
#g.fig.subplots_adjust(left  = 0.125,right = 0.5,bottom = 0.1,top = 0.9, wspace=.02, hspace=.02)

g = sns.PairGrid(iris, hue="species")
g.map_diag(plt.hist)
g.map_offdiag(plt.scatter)
g.add_legend();

g = sns.PairGrid(tips, hue="size", palette="GnBu_d")
g.map(plt.scatter, s=50, edgecolor="white")
g.add_legend();

十一、热度图绘制

%matplotlib inline
import matplotlib.pyplot as plt
import numpy as np; 
np.random.seed(0)
import seaborn as sns;
sns.set()

Heatmap:当数据变化时,观察哪个点值比较大,哪个点值比较低。值的变化用颜色的趋势表示。 

uniform_data = np.random.rand(3, 3)
print (uniform_data)
heatmap = sns.heatmap(uniform_data)

  右边调色板进行取值设置(vmin,vmax)

ax = sns.heatmap(uniform_data, vmin=0.2, vmax=0.5)

 指定中心值,中心值上下颜色不一样

normal_data = np.random.randn(3, 3)
print (normal_data)
ax = sns.heatmap(normal_data, center=0)

读取一个数据

 将原始数据转化为可支持的矩阵的形式

flights = flights.pivot("month", "year", "passengers")
print (flights)
ax = sns.heatmap(flights)

 将实际的值画到Heatmap当中

ax = sns.heatmap(flights, annot=True,fmt="d")

指定格与格之间的间距 

ax = sns.heatmap(flights, linewidths=.5)

指定调色板

ax = sns.heatmap(flights, cmap="YlGnBu")

  

调色板隐藏

ax = sns.heatmap(flights, cbar=False)

相关系数可以用pandas之间把相关系数求出来,放到Heatmap当中,可以很清晰的看出变量与变量或者特征与特征之间的相关程度。

本文链接:https://my.lmcjl.com/post/12145.html

展开阅读全文

4 评论

留下您的评论.