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')
推荐链接
发表评论