1.seaborn介绍

Seaborn是以matplotlib为底层,更容易定制化作图的Python库 Seaborn官网:Seaborn官网 Seaborn是对matplotlib的基础上进行更高级的封装,作图更加容易。matplotlib更加灵活,可以定制化,而seaborn像是更高级的封装,使用更加快捷方便。 seaborn安装 pip install seaborn==0.11.2 #最稳定的版本

2.风格设置

import numpy as np

import seaborn as sns

import matplotlib.pyplot as plt

y = np.random.randint(50, 100, 20)

x = range(20)

# ["white", "dark", "whitegrid", "darkgrid", "ticks"]

# set_style(value) 统一设置风格

sns.set_style('white')# 白背景

plt.subplot(231)

plt.plot(x,y)

sns.set_style('dark')# 黑背景

plt.subplot(232)

plt.plot(x,y)

sns.set_style('whitegrid')# 白背景-白格

plt.subplot(233)

plt.plot(x,y)

sns.set_style('darkgrid')# 黑背景-白格

plt.subplot(234)

plt.plot(x,y)

sns.set_style('ticks')# 白背景-数据存在锯齿

plt.subplot(235)

plt.plot(x,y)

# axes_style(value)单一设置风格

with sns.axes_style('dark'):

plt.plot(x,y)

# %%

# 移除轴脊柱,white和ticks两个风格都能够移除顶部和右侧的不必要的轴脊柱,

# 只能通过seaborn来移除

plt.subplot(222)

sns.set_style('ticks')

plt.plot(x,y)

# 移除轴脊柱要在填充数据plot之后,显示图标之前

sns.despine()

3.seaborn图像风格管理

seaborn调整线条粗细方法

import numpy as np

import seaborn as sns

import matplotlib.pyplot as plt

# 四个预设上下文中,在相对大小的顺序是paper、notebook、talk、poster。

# 该notebook是默认的

x = range(10)

y = np.random.randint(10,100,10)

plt.subplot(231)

sns.set_context('paper')

plt.plot(x,y)

plt.subplot(232)

sns.set_context('notebook')

plt.plot(x,y)

plt.subplot(233)

sns.set_context('talk')

plt.plot(x,y)

plt.subplot(234)

sns.set_context('poster')

plt.plot(x,y)

# %%

# 方法2:使用set,set中可以修改很多图例的大小粗细,具体参考文档

# 修改线条粗细

sns.set(rc={'lines.linewidth':5})

plt.plot(x,y)

4.seaborn调色板

import numpy as np

import seaborn as sns

import matplotlib.pyplot as plt

# 绘制调色板

sns.palplot(sns.color_palette())

# 指定matplotlib中的颜色

sns.palplot(sns.color_palette('Reds'))# 指定颜色的由浅到深

sns.palplot(sns.color_palette('Reds_r'))# 指定颜色的由深到浅

# 常用参数deep, muted, pastel, bright, dark, colorblind(圆形颜色系统)

sns.palplot(sns.color_palette('colorblind'))

sns.palplot(sns.color_palette('dark'))

# 指定颜色,自定义色板

sns.palplot(sns.color_palette(["#9b59b6", "#3498db", "#95a5a6", "#e74c3c", "#34495e", "#2ecc71"]))

# 自定义连续色版

sns.palplot(sns.light_palette('red'))

sns.palplot(sns.dark_palette('red'))

# 指定色板个数

sns.palplot(sns.color_palette(sns.color_palette('husl',n_colors=15)))

5.seaborn调色板的使用

#%%

import numpy as np

import seaborn as sns

import matplotlib.pyplot as plt

# 获取单个颜色,设置线段颜色

plt.plot([1,2],[2,4],sns.xkcd_rgb['apple green'],lw=5)# lw是指定线条宽度

# %%

# 获取多个颜色,对条形图进行颜色填充

x = range(5,10)

# 填充一种颜色的深浅

plt.bar(x,x,color=sns.light_palette('green'))

# plt.bar(x,x,color=sns.color_palette([]))也可以根据指定的颜色编码进行自定义填充

data = np.random.normal(size=(20,8))+np.arange(8)/2

sns.barplot(data=data, palette=sns.color_palette('hls'))

6.seaborn绘制直方图

import numpy as np

import seaborn as sns

import matplotlib.pyplot as plt

x = np.random.normal(size=100)

# 设置样式风格

sns.set(style='white')

# 绘制直方图,bins设置组数 kde是否显示数据分布曲线

sns.displot(x,bins=20,kde=True)

7.seaborn加载数据——加载泰坦尼克号数据

import numpy as np

import seaborn as sns

import matplotlib.pyplot as plt

print(sns.get_data_home())# 查看数据所在的目录

titanic = sns.load_dataset('titanic')

titanic

8.seaborn绘制条形图

import numpy as np

import seaborn as sns

import matplotlib.pyplot as plt

# 加载数据

titanic = sns.load_dataset('titanic')

# 绘制男女存活人数条形图,xy是横轴与纵轴(数据集的参数),data是数据集

sns.barplot(x='sex',y='survived',data=titanic)

# 绘制分组条形图:在以上的基础,对船舱进行分组

sns.barplot(x='sex',y='survived',data=titanic,hue='class')

9.seaborn绘制盒图

import numpy as np

import seaborn as sns

import matplotlib.pyplot as plt

tips = sns.load_dataset('tips')

# 绘制盒须图:日期与消费之间的关系:hue是分组

sns.boxplot(x='day', y='total_bill', data=tips, hue='time')

10.seaborn绘制小提琴图

小提琴图代表数据越密集,用于展示数据的分布情况

import seaborn as sns

# seaborn导入数据

tips = sns.load_dataset('tips')

sns.violinplot(x='day', y='total_bill', data=tips)

# 绘制小提琴图(按照性别分组)

sns.violinplot(x='day',y='total_bill',data=tips,hue='sex')

# 合并分组图

sns.violinplot(x='day',y='total_bill',data=tips,hue='sex',split=True)

# 去掉中间四分点

sns.violinplot(x='day',y='total_bill',data=tips,hue='sex',split=True,inner=None)

11.seaborn绘制分布散点图和分簇散点图

import seaborn as sns

tips = sns.load_dataset('tips')

# 绘制分布散点图 stripplot()

sns.stripplot(x='day', y='total_bill', data=tips)

#jitter控制是否震动(集中在一条直线)默认是True

sns.stripplot(x='day', y='total_bill', data=tips, jitter=False)

# swarmplot分簇散点图

sns.swarmplot(x='day',y='total_bill',data=tips)

# swarmplot分簇散点图: 按照性别分组

sns.swarmplot(x='day',y='total_bill',data=tips, hue='sex')

# swarmplot分簇散点图: 按照时间分组

sns.swarmplot(x='day',y='total_bill',data=tips, hue='time')

# swarmplot分簇散点图: 指定颜色和透明度

sns.swarmplot(x='day',y='total_bill',data=tips, color='k', alpha=0.2)

12.seaborn绘制散点图

import seaborn as sns

tips = sns.load_dataset('tips')

sns.scatterplot(data=tips,x='total_bill',y='tip')

# size指定散点中点的大小

sns.scatterplot(data=tips,x='total_bill',y='tip',size='size')

# hue按照是否吸烟进行分组

sns.scatterplot(data=tips, x='total_bill',y='tip',size='size',hue='smoker')

# 设置风格,利用风格分组

sns.scatterplot(data=tips, x='total_bill',y='tip',size='size',hue='smoker',style='time')

13.seaborn绘制双轴密度图

双轴密度图主要是用于观察数据分布的情况

# 导入模块

import numpy as np

import pandas as pd

import seaborn as sns

# 生成数据

# 生成 多元高斯正态分布 的数据

# 多元高斯正态分布是一堆正太分布向更多维度的推广,这种分布由其均值和协方差矩阵来确定

data = np.random.multivariate_normal([0,1], [(1,0.5),(0.5,1)], 1000)# 均值 协方差对称矩阵

df = pd.DataFrame(data, columns=['x','y'])

# 绘制密度图

sns.kdeplot(x='x',y='y',data=df)

# 填充区域中的颜色shade

sns.kdeplot(x='x',y='y',data=df,shade=True)

# color指定颜色

sns.kdeplot(x='x',y='y',data=df,shade=True,color='red')

14.seaborn绘制联合图

包含x和y的散点图,x和y分别的分布状态

# 导入模块

import numpy as np

import pandas as pd

import seaborn as sns

# 生成数据

# 生成 多元高斯正态分布 的数据

# 多元高斯正态分布是一堆正太分布向更多维度的推广,这种分布由其均值和协方差矩阵来确定

data = np.random.multivariate_normal([0,1], [(1,0.5),(0.5,1)], 1000)# 均值 协方差对称矩阵

df = pd.DataFrame(data, columns=['x','y'])

# 指定中间图的类型

# kind scatter散点图(默认) kde双轴密度图 hist直方图 hex六边形 reg回归散点图 resid

sns.jointplot(data=df, x='x', y='y', kind='scatter')

sns.jointplot(data=df, x='x', y='y', kind='kde',shade=True)

sns.jointplot(data=df, x='x', y='y', kind='reg')

# 指定颜色

sns.jointplot(data=df, x='x', y='y', kind='scatter',color='k')

15.seaborn绘制点图

很类似于条形图,可以很好的观察两者或多者之间的变化问题(性别)

import seaborn as sns

titanic = sns.load_dataset('titanic')

# 绘制点图: 绘制不同性别的存货情况,根据船舱进行分类

# hue 进行分组

sns.pointplot(data=titanic, x='sex',y='survived', hue='class')

# 不同船舱的存活情况, hue根据性别分类

# 对颜色进行指定palette

# markers:指定点的形状

# linestyles:指定线的样式

sns.pointplot(data=titanic, x='class', y='survived',hue='sex',palette={'male':'g','female':'m'},markers=['^','o'],linestyles=['-','--'])

16.seaborn绘制热力图

热力图(heatmap)是以矩阵的形式表示,数据值在图形中以颜色的深浅来标识数量的多少,并可以快速找到最大值和最小值位置。在机器学习的分类中经常用来作混淆矩阵的比较。

import seaborn as sns

import numpy as np

data = np.random.randn(3,3)

sns.heatmap(data=data)

# vmin,vmax指定最大值颜色最小值颜色。缩小颜色范围

sns.heatmap(data=data,vmin=0.2,vmax=0.5)

# 加载航班数据

flights = sns.load_dataset('flights')

flights

# 使用pivot(DataFrame中一个函数)处理数据成二维表的格式,使用热力图必须操作成二维格式

data = flights.pivot('month','year','passengers')

data

# 绘制热力图

# annot:显示具体数值到每个位置中

# fmt:以整数形式显示

# linewidths:每个单元格中添加缝隙

# cbar:设置为False时,去掉图例

# cmap:修改色系

sns.heatmap(data=data, annot=True, fmt='d', linewidths=0.5,cbar=True, cmap='YlGnBu')

17.seaborn绘制散布图矩阵

pairplot该函数会同时绘制数据中所有特征两两之间的关系图

import seaborn as sns

import matplotlib.pyplot as plt

# 加载鸢尾花数据

iris = sns.load_dataset('iris')

sns.pairplot(iris)

# hue:添加分类,分类出不同种类的花瓣

# kind:指定图的类型kind : {'scatter', 'kde', 'hist', 'reg'}

sns.pairplot(data=iris, hue='species',kind='kde')

18.seaborn绘制线型图

import seaborn as sns

iris = sns.load_dataset('iris')

# 绘制线型图

# hue:分类

sns.lineplot(x='sepal_length',y='sepal_width',data=iris,hue='species')

# 加载小费数据

# size:指定粗细(其实也是分类的一种)

# style:指定线得格式(其实也是分类的一种)

tips = sns.load_dataset('tips')

sns.lineplot(x='total_bill',y='tip',data=tips,hue='sex',size='smoker',style='time')

19.seaborn绘制线性回归图

线性回归图:根据大量数据找到模拟线性回归线

sns.lmplot() 功能多,规范多sns.regplot()推荐,支持的参数与数据类型比较多一些

import seaborn as sns

iris = sns.load_dataset('iris')

tips = sns.load_dataset('tips')

sns.regplot(data=iris,x='petal_length',y='petal_width')

sns.lmplot(data=iris,x='petal_length',y='petal_width')

20.seaborn中catplot绘制网格图

import seaborn as sns

tips = sns.load_dataset('tips')

# catplot分类

# kind:指定类型("strip"默认散点图, "swarm"分簇散点图, "box"盒须图, "violin"小提琴图,"boxen"箱型图(类似盒须), "point"(点图), "bar"(柱状图), or "count".)

sns.catplot(data=tips,x='day',y='total_bill',kind='violin')

# col,row:横或竖进行分类

sns.catplot(data=tips,x='day',y='total_bill',kind='violin',col='sex')

# col,row:横或竖进行分类

# hue:分组

sns.catplot(data=tips,x='day',y='total_bill',row='sex',col='time',hue='smoker')

21.seaborn中FacetGrid绘制网格图

当想把数据中的多个子集展示出来时候,就可以使用FacetGrid,步骤如下

绘画区域使用方法绘画数据 FacetGrid常用参数:

height 高aspect 宽palette 色板col 分图属性(列)row 分图属性(行)hue 分类属性margin_titles 设置标题显示方式(默认单个显示,这个设置成分组)row_order 显示分图数据hue_kws 显示图标记的形状

import seaborn as sns

import matplotlib.pyplot as plt

tips = sns.load_dataset('tips')

# 绘画区域:分类

g = sns.FacetGrid(data=tips, col='sex')

# 绘制具体数据

g.map(plt.hist, 'total_bill')

# 网格图中绘制散点图

# hue进行分组

# alpha防止散点覆盖,添加透明度

# palette设置颜色

# hue_kws设置显示的点形状

# s修改散点大小

# edgecolor、linewidth修改图形边颜色,边的宽度

# subplots_adjust设置子图之间距离

# set_axis_labels修改横竖轴标签

# height、aspect修改画布大小

# xticks、yticks修改x和y的刻度

g = sns.FacetGrid(data=tips, col='sex', row='time',hue='smoker',margin_titles=True,palette={'Yes':'g','No':'b'},

hue_kws={'marker':['^','o']},height=2, aspect=2)

g.map(plt.scatter, 'total_bill', 'tip',alpha=0.5,s=10,edgecolor='blue',linewidth=1)

g.fig.subplots_adjust(wspace=1,hspace=1)

g.set_axis_labels('total','t')

g.set(xticks=range(0,60,10),yticks=range(0,20,2))

# 添加图例

g.add_legend()

# 绘制回归分析图

# fit_reg 是否给出回归线

# x_jitter 抖动

g = sns.FacetGrid(data=tips, row='smoker', col='time', margin_titles=True)

g.map(sns.regplot, 'size', 'total_bill', fit_reg=True, x_jitter=0.2)

# 绘制条形图

g = sns.FacetGrid(data=tips, col='day', size=5)

g.map(sns.barplot, 'sex', 'total_bill')

# 绘制盒须图

# row_order col_order指定排序方式

from pandas import Categorical

order_day = Categorical(['Sun','Sat','Thur','Fri'])

g = sns.FacetGrid(data=tips, col='day', size=5, col_order=order_day)

g.map(sns.boxplot, 'sex', 'total_bill')

推荐链接

评论可见,请评论后查看内容,谢谢!!!
 您阅读本篇文章共花了: