Python数据可视化工具——Seaborn

1 简介

Seaborn基于matplotlib,它在matplotlib的基础上进行了更高级的API封装,便于用户可以更加简便地做出各种有吸引力的统计图表。它还能够高度兼容numpy与pandas数据结构以及scipy与statsmodel等统计模式。用更简单的调用呈现更多图表
seaborn官网: http://seaborn.pydata.org/

2 基本设置

  1. 图表的外部的风格:整个图或者子图,图表的底纹
  2. 图表的内部的风格:标签、线条和其他
  3. 颜色的设置
#导入需要的包
import numpy as np
import pandas as pd
import scipy as stats
import matplotlib.pyplot as plt
import seaborn as sns

2.1seaborn绘图初体验

先看一下matplotlib绘图效果

def sinplot(flip = 1):
    x = np.linspace(0,14,100)
    for i in range(1,7):
        plt.plot(x,np.sin(x+i*0.5)*(7-i)*flip)
plt.figure(figsize = (6,4))
sinplot()
plt.show()

在这里插入图片描述

再来看看seaborn绘图效果

#seaborn.set(context = 'rotebook',style = 'darkgrid',palette = 'deep',font = 'sans-serif',
           font_scale = 1,color_codes = True,rc = None)
#set()函数可以设置背景色、风格、字型、字体等
sns.set()  #参数非常多,一般不用
plt.figure(figsize = (6,4))
sinplot()
plt.show()

在这里插入图片描述
两者直接形成对比,seaborn生成的图片色彩柔和,直接生成灰色背景、白色网格。

2.2图表风格

set_style() seaborn提供了5种默认的风格

  • darkgrid/whitegrid(深色带格子/白色带格子):更关注数值
  • dark/white:更关注整体趋势
  • ticks:强化刻度
sns.set_style('whitegrid')
plt.figure(figsize = (6,4))
sinplot()
plt.show()

在这里插入图片描述

#整个图的风格
sns.set_style('white')
plt.figure(figsize = (6,4))
sinplot()
plt.show()

在这里插入图片描述

2.3 图表坐标轴

seaborn.despine(fig = None,ax = None, top = True, rigth = True, left = False, bottom = False,offset = None, trim = False) top,right,left,bottom:布尔型,为True时不显示
offset: 与坐标轴之间的偏移
trim: 为True时,将坐标轴限制在数据的最大最小值之间

#设置风格
sns.set_style('white')
plt.figure(figsize = (6,4))
sinplot()
sns.despine(top = True,right = True) #删除了上坐标轴、右坐标轴
plt.show()

在这里插入图片描述

#设置风格
sns.set_style('white')
plt.figure(figsize = (6,4))
sinplot()

sns.despine(top = True,right = True,offset=20) #删除了上坐标轴、右坐标轴,offset参数可以调节分离坐标轴
plt.show()

在这里插入图片描述

2.4 设置局部图表风格

axes_style() 与with配合的用法,设置不同的子图使用不同的风格

plt.figure(figsize = (6,4))
with sns.axes_style('darkgrid'):  #设置第一个子图的风格
    plt.subplot(211)
    sinplot()
    
with sns.axes_style('whitegrid'):  #设置第二个子图的风格
    plt.subplot(212)
    sinplot()

在这里插入图片描述

2.5 设置内容风格

set_context(),包括paper\notebook\talk 演讲\poster 海报 设置绘图背景参数的,它主要来影响标签、线条和其他元素的效果,但不会影响整体的风格

sns.set_style('white')  #图表风格
sns.set_context('poster')  #设置图表里面的内容,标签,线条和其他元素
sinplot()
plt.show()

在这里插入图片描述

3 数据集分布的可视化

3.1 单变量分布图

一个特征,比如:年龄

3.1.1 直方图

sns.set_style('white')  #图表风格
sns.set_context('talk')  #设置图表里面的内容,标签,线条和其他元素
np.random.seed(29)
x = np.random.normal(size = 1000)
#通过kernel density estimate(KDE)核密度估计计算出的概率密度函数
#kde:True 拟合出概率密度曲线;rug:True x轴上点上数据;norm_hist 为True 纵轴是概率,为False纵轴是 频率
#bins:设置柱子数量
sns.distplot(x,bins = 50,kde = False,rug = True,color = 'r',norm_hist = True)
plt.show()

在这里插入图片描述

sns.distplot(x,hist = False,rug = False,color = 'r',norm_hist = True)  #只绘制概率密度曲线
plt.show()

在这里插入图片描述

3.1.2 拟合参数分布

#当数据越来越多时,拟合曲线与标准的gamma分布越接近
x = np.random.gamma(6,size = 200) # gamma 分布数据
sns.displot(x,bins = 100,kde = True, color = 'r', fit = stats.gamma); #拟合分布

3.1.3

sns.rugplot(x,height = 0.2,color = 'r',alpha = 0.9)
plt.show()

在这里插入图片描述

3.2 双变量分布图(二元)

#数据集
mean,cov = [0,1],[(1,0.5),(0.5,1)]
data = np.random.multivariate_normal(mean,cov,200)
df = pd.DataFrame(data,columns = ['x','y'])
df.head()

在这里插入图片描述

3.2.1 散点图

sns.jointplot(x = 'x',y = 'y',data = df)
plt.show()

在这里插入图片描述

3.2.2 Hexbin图(六边形分箱图

x,y = np.random.multivariate_normal(mean,cov,1000).T
with sns.axes_style('white'):
    #可以指定什么形状(hex六角形)
    sns.jointplot(x = x,y=y,kind= 'hex',color = 'r')
    
#颜色越深代表点数越多
plt.show()

在这里插入图片描述

3.2.3 核密度估计

sns.jointplot(x = x,y=y ,kind= 'kde',coloc = 'b')
plt.show()

在这里插入图片描述

3.3 可视化数据集中成对的关系

3.3.1 矩阵散点图 - pairplot

iris=pd.read_csv(r".\data\iris.csv")
iris.head() #150个样本4列,3种类别

在这里插入图片描述

#绘制图形中共6种,其余对称关系,中间的是自己和自己,故用直方图表示
sns.pairplot(iris);# 默认对角线hist,非对角线scatter
plt.show()

在这里插入图片描述

#通过kind画不同的图,diag_kind 对角线类型
sns.pairplot(iris,hue="species",diag_kind='hist');
plt.show()

在这里插入图片描述

#属性两两间的关系 + 属性的灰度图
g = sns.PairGrid(iris)
g.map_diag(sns.kdeplot) # 对角线单个属性图
g.map_offdiag(sns.kdeplot, cmap="Blues_d", n_levels=20) # 非对角线两个属性关系图
plt.show()

在这里插入图片描述

3.3.2 矩阵散点图 - PairGrid

sns.set_context('notebook')
g = sns.PairGrid(iris)
g.map(plt.scatter)
plt.show()

在这里插入图片描述

g = sns.PairGrid(iris,hue = "species")
g.map_diag(plt.hist) #对角线 直方图
g.map_offdiag(plt.scatter) #非对角线 散点图
g.add_legend()
plt.show()

在这里插入图片描述

3.3.3 分类散点图—— stripplot

df = pd.DataFrame({'total_bill':np.random.randint(20,30,210),
                  'sex':['女']*60+['男']*150,
                  'day':['Mon','Tues','Wed','Thur','Fri','Sat','Sun']*30})

在这里插入图片描述

#按照不同类别对样本数据进行分布散点图绘制
sns.stripplot(
x = 'day',   #分组统计字段
    y = 'total_bill',  #数据分布统计字段
    #对xy数据对调,将会使得散点图横向分布
    data = df, #对应数据
    jitter = 0.1,  
    size = 10,edgecolor = 'w',linewidth = 1,marker = 'o'
)
plt.show()

在这里插入图片描述

#通过hue参数再分类
sns.stripplot(x = 'day',   #分组统计字段
    					y = 'total_bill',  #数据分布统计字段
              hue = 'sex',
				    #对xy数据对调,将会使得散点图横向分布
				    data = df, #对应数据
             jitter = True)
plt.show()

在这里插入图片描述

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值