Matplotlib&Seaborn绘图整理(基于Titanic数据集)【未完待续】

目录

一、Titanic数据集下载

二、Titanic数据集预处理

1数据读取及查看

2数据预处理

三、基于Titanic数据集的Matplotlib&Seaborn绘图

1分布图绘制

1.1displot(单变量绘制)

1.2joinplot(双变量+单变量统一绘制)

1.3kdeplot(核密度估计图)

1.4 pairplot(主要用于特征两两对比作图)

1.5 rugplot

2 分类数据可视化-散点图

2.1stripplot(分布散点图)

2.2swarmplot(分簇散点图)

3分类数据可视化-分布图

3.1boxplot

3.2 violinplot​​​

3.3 lvplot

4分类数据可视化-统计图

4.1 barplot(直方图)

4.2 countplot(计数柱状图)

4.3 pointplot(折线图)

7 factorplot

8 heatmap

9 tsplot


一、Titanic数据集下载

Titanic数据集(训练+测试)提取码:d4t6【PS:本文只用到了train数据集】

二、Titanic数据集预处理

对于所拿到的Titanic数据集首先做一定的处理,为后续绘图工作的进行打下基础

1数据读取及查看

import numpy as np
import pandas as pd
import re
import warnings
warnings.filterwarnings('ignore')

#读取数据
train_data=pd.read_csv('.\\train.csv')
#查看数据
train_data.info()

得到的结果为:

Data columns (total 12 columns):
PassengerId    891 non-null int64
Survived       891 non-null int64
Pclass         891 non-null int64
Name           891 non-null object
Sex            891 non-null object
Age            714 non-null float64
SibSp          891 non-null int64
Parch          891 non-null int64
Ticket         891 non-null object
Fare           891 non-null float64
Cabin          204 non-null object
Embarked       889 non-null object

可以看到,数据集有12个属性,其中Age(714)、Cabin(204)、Embarked(889)存在缺失值,因此下面对该数据集进行数据预处理(此处为缺失值处理)。

2数据预处理

#Embarked处理方法:由于在属性(在哪儿上船)相对于学习来说不是很重要,可以对缺失值赋均值或者众数(此处选众数)
train_data.Embarked[train_data.Embarked.isnull()]=train_data.Embarked.dropna().mode().values

#Cabin处理方法:对于标称属性,可以赋一个代表缺失的值,比如'U0',因为缺失值本身也代表着一些隐含信息
train_data['Cabin']=train_data.Cabin.fillna('U0')#=train_data.Cabin[train_data.Cabin.isnull()]='U0'

#Age处理方法:因为Age在该数据集里是一个相当重要的特征,所以保证一定的缺失值田中准确率是非常重要的
#一般情况下使用回归或随机森林等模型来预测确实属性的值(此处使用随机森林预测模型)
#选取数据集中的数值属性作为特征(sklearn模型只能处理数值属性),此处仅选数值特征,实际应用中需要将非数值特征转化为数值特征
from sklearn.ensemble import RandomForestRegressor
age_df=train_data[['Age','Survived','Fare','Parch','Pclass','SibSp']]
age_df_notnull=age_df.loc[(train_data['Age'].notnull())]
age_df_isnull=age_df.loc[(train_data['Age'].isnull())]
X=age_df_notnull.values[:,1:]
Y=age_df_notnull.values[:,0]
#使用随机森林模型训练数据#n_jobs=-1:使用机器的所有核
RFR=RandomForestRegressor(n_estimators=1000, n_jobs=-1)
RFR.fit(X,Y)
predictAges=RFR.predict(age_df_isnull.values[:,1:])
train_data.loc[train_data['Age'].isnull(),['Age']]=predictAges

#查看缺失值处理后的数据
train_data.info()

缺失值处理后的数据为:

Data columns (total 12 columns):
PassengerId    891 non-null int64
Survived       891 non-null int64
Pclass         891 non-null int64
Name           891 non-null object
Sex            891 non-null object
Age            891 non-null float64
SibSp          891 non-null int64
Parch          891 non-null int64
Ticket         891 non-null object
Fare           891 non-null float64
Cabin          891 non-null object
Embarked       891 non-null object
dtypes: float64(2), int64(5), object(5)

可以看到,此时的数据集为完整数据集,没有缺失的数据,因此下面我们就可以拿该数据集进行绘图操作了。

三、基于Titanic数据集的Matplotlib&Seaborn绘图

首先简单介绍一下Matplotlib和seaborn的关系:

Seaborn是python中基于matplotlib的统计绘图模块,其基于Matplotlib 核心库进行了更高级的 API 封装,可以让我们轻松地画出更漂亮的图形。而 Seaborn 的漂亮主要体现在配色更加舒服、以及图形元素的样式更加细腻。如果说matplotlib是“tries to make easy things easy and hard things possible”,那么seaborn则是让“hard things”也变简单。Seaborn和matplotlib的区别在于,seaborn把绘图风格参数与数据参数分开设置。这样我们可以轻易的改变图像的风格。

下面开始Seaborn的使用

sns.set()

import matplotlib.pyplot as plt
import seaborn as sns
sns.set()#使用set设置默认样式

此处sns.set() 采用了默认参数,分别为:

sns.set(
context='notebook', style='darkgrid', palette='deep',
font='sans-serif', font_scale=1, color_codes=False, rc=None
)

其中各参数的作用如下:

(1)context=' '参数

设置输出图片的大小尺寸(scale),分别有 {paper,notebook,talk,poster} 四个值。其中poster>talk>notebook>paper。

(2)style=' '参数

控制默认样式(主题),分别有{darkgrid,whitegrid,dark,white,ticks}:darkgrid(灰色背景+白网格),whitegrid(白色背景+黑网格),dark(仅灰色背景),white(仅白色背景),ticks(坐标轴带刻度),修改主题也可以使用sns.set_style(' ')函数。

建议在绘制大量数据元素时,使用whitegrid主题;如果想突出带有固定模式的数据时,建议不使用网格,即dark/white主题;在体现少量特殊的数据元素结构时,使用ticks主题。

若想要隐藏右方和上方的坐标轴,可以使用despine()函数将其去掉,despine()只有在主题为white或者ticks主题时起作用sns.despine(left=True, bottom=True, right=False, top=False)

(3)palette=' '参数

预设的调色板。分别有{deep,muted,bright,pastel,dark,colorblind} 等,可以自行更改查看它们之间的不同。

(4)font=' '参数

用于设置字体,font_scale=设置字体大小,color_codes=不使用调色板而采用先前的'r'等色彩缩写

1分布图绘制

1.1displot(单变量绘制)

displot()集合了matplotlib的hist()核函数估计kdeplot的功能,该函数包含了绝大多数单变量可视化的能力,增加了rugplot分布观测条显示与利用scipy库fit拟合参数分布的新颖用途。

seaborn.distplot(
a,bins=None,hist=True,kde=True, rug=False, fit=None, hist_kws=None, 
kde_kws=None, rug_kws=None, fit_kws=None, color=None, vertical=False,
norm_hist=False, axlabel=None, label=None, ax=None
)

各参数含义如下:

  • bin :matplotlib hist()的参数,控制数据切分数量
  • kde是否显示高斯分布密度图
  • hist是否显示直方图
  • rug在X轴上画一些分布线,控制是否生成观测数值的小细条
  • fit控制拟合的参数分布图形,直观地评估器与观测数据的对应关系
  • hist_kws,kde_kws,rug_kws,fit_kws参数接收字典类型,可以自行定义更多高级的样式
  • norm_hist 若为True,则直方图高度显示的为密度而非计数(在含有kde图像中默认为True)
  • label  图例
  • axlabel制定横轴的说明(横坐标名称)
  • ax是指明若在绘制子图的情况下,该图位于第几个子图

绘图示例:

绘制Titanic上成员的年龄分布

#1.1.1
#subplot()是将整个figure均等分割,而axes()则可以在figure上画图。
f, ax = plt.subplots(1,2,figsize=(6, 6))
sns.distplot(train_data['Age'], axlabel='Age1', ax=ax[0])#左
sns.distplot(train_data['Age'], kde=False,axlabel='Age2', ax=ax[1],norm_hist=False)#右
plt.show()

#1.1.2
#拟合gamma分布:图中黑色的线即为gamma分布
import scipy as sp
sns.distplot(train_data['Age'], axlabel='Age3',fit=sp.stats.gamma,kde=False)
plt.show()

1.2joinplot(双变量+单变量统一绘制)

联合分布

1.3kdeplot(核密度估计图)

核密度估计是在概率论中用来估计未知的密度函数,属于非参数检验方法之一。通过核密度估计图可以比较直观的看出数据样本本身的分布特征。

seaborn.kdeplot(data,data2=None,shade=False,vertical=False,kernel='gau',bw='scott',
gridsize=100,cut=3,clip=None,legend=True,cumulative=False,shade_lowest=True,cbar=False,
cbar_ax=None, cbar_kws=None, ax=None, *kwargs)

各参数含义如下:

  • shade :若为True,则在kde曲线下面的区域中进行阴影处理,若做阴影处理,可加设color参数控制曲线及阴影的颜色
  • cut:表示绘制的时候切除带宽往数轴极限数值的多少(默认为3),配合bw参数使用
  • clip:表示查看部分结果
  • cumulative:是否绘制累积分布
  • vertical:表示以X轴进行绘制还是以Y轴进行绘制
  • data,data2:若只有data则表示一元kde图像,若存在两个data2则表示图像为二元kde图像
  • cbar:若为True,则会添加一个颜色棒(颜色棒在二元kde图像中才有)
  • kernel:核函数,代表性的6种核函数如下:

gau (Gaussian)

cos(Cosine)

biw(Quartic(biweight))

epa(Epanechnikov)

tri (Tricube)

triw (Triweight)

  • gridsize:每个格网里面应该包含多少个点,越大表示格网里面的点越多,越平滑
  • bw:带宽bandwidth控制对数据的拟合程度,与直方图中的bin(数据切分数量参数)大小非常相似

seaborn的kdeplot支持四类核密度带方法,分别如下:

①scott (斯考特带宽法):是一种不进行自定义带宽的核带宽估计方法,是一种基于最优直方图的估计算法

②silverman (西尔弗曼带宽法):是一种基于经验法则的带宽估计方法

【以上两种方法均不用我们自定义核带宽,即完全可以视为默认值】

③scalar (标量带宽法):自定义标量,需要我们自己定义各种带宽,可以从不同的研究尺度去进行研究

④pair of scalars (标量对带宽法):暂无研究结果

  • shade_lowest : 是否有最低值渲染,这个参数只有在二维密度图上才有效

绘图示例:

【一元kde图像】

#1.3.1
#简单绘制Titanic上成员的年龄分布
sns.kdeplot(train_data['Age'])
plt.show()

#在上图基础上设置shade、cut以及vertical参数
sns.kdeplot(train_data['Age'],shade=True,color='g',vertical=True,cut=0)#1.3.2左
plt.show()
sns.kdeplot(train_data['Age'],shade=True,color='g',vertical=True,cut=5)#1.3.3中
plt.show()
sns.kdeplot(train_data['Age'],shade=True,color='g',vertical=True,cut=10)#1.3.4右
plt.show()

【二元kde图像】

绘制Titanic数据集中年龄(Age)与票价(Fare)的二元kde图

#1.3.5
sns.kdeplot(train_data['Age'], train_data['Fare'], cbar="True",  shade=True)
plt.show()

为更方便看图,随机设置x,y进行绘图如下所示:

x=np.random.randn(100)
y=np.random.randn(100)
sns.kdeplot(x, y, cbar="True",  shade=True)#1.3.6左
plt.show()
sns.kdeplot(x, y, bw="scott",cbar="True")#1.3.7右
plt.show()

1.4 pairplot(主要用于特征两两对比作图)

pairplot可以一次性两两组合多个变量做出多个对比图,有n个变量,就会做出一个n × n个格子的图,譬如有2个变量,就会产生4个格子,每个格子就是两个变量之间的对比图。相同的两个变量之间(var1  vs  var1 和 var2  vs  var2)以直方图展示,不同的变量则以散点图展示(var1  vs  var2 和var2  vs  var1)【要注意的是数据中不能有NaN(缺失的数据),否则会报错】

  1. var1  vs  var1
  2. var1  vs  var2
  3. var2  vs  var1
  4. var2  vs  var2
seaborn.pairplot(data, hue=None, hue_order=None, palette=None, vars=None,
x_vars=None, y_vars=None, kind='scatter', diag_kind='hist', markers=None, 
size=2.5, aspect=1, dropna=True, plot_kws=None, diag_kws=None, grid_kws=None)

各参数含义如下:

  • data:DataFrame格式的数据
  • hue :按照不同类别对样本数据进行图绘制,如在Titanic数据集中分为存活与否两类绘制年龄与票价等的图像
  • palette:调色板颜色{deep,muted,bright,pastel,dark,colorblind} 
  • vars:设置绘图所使用的data中的变量,若不设置则使用data中的全部变量。参数类型:numeric类型的变量list
  • {x,y}_vars:设置绘图横纵方向上的变量,若不设置则使用data的全部变量。参数类型:numeric类型的变量list
  • kind=' ':{‘scatter’,'reg'}设置作图的方式
  • diag_kind=' ':{'hist','kde'}设置对角线作图的方式
  • markers:使用不同的形状。参数类型:list
  • size:默认为6,图的尺寸大小(正方形)。参数类型:numeric
  • aspect:aspect_size给出每个面的宽度(以英寸为单位)
  • dropna:是否剔除缺失值,由于数据中不能含有缺失值否则报错,所以默认剔除(True)
  • plot/diag/grid_kws: 指定其他参数。参数类型:dicts

选取Titanic数据集中['Pclass','Age','SibSp','Parch','Fare']五个变量绘制pairplot图

#1.4.1上
sns.pairplot(train_data,vars=['Pclass','Age','SibSp','Parch','Fare'])
plt.show()
#1.4.2下
sns.pairplot(train_data,vars=['Pclass','Age','SibSp','Parch','Fare'], hue="Survived",palette="colorblind")
plt.show()

1.5 rugplot

2 分类数据可视化-散点图

2.1stripplot(分布散点图)

stripplot的作图原理就是按照不同类别对样本数据进行分布散点图绘制,适用于分类数据

seaborn.stripplot(x=None, y=None, hue=None, data=None, order=None,
hue_order=None, jitter=False, dodge=False, orient=None, color=None, 
palette=None, size=5, edgecolor='gray', linewidth=0, ax=None, **kwargs)

各参数含义如下:

  • x:设置分组统计字段
  • y:设置分布统计字段
  • hue :按照不同类别对样本数据进行分布散点图绘制,如在Titanic数据集中分为存活与否两类绘制年龄与票价等的图像
  • order:对x参数所选字段内的分类类别进行排序以及筛选
  • jitter:当数据点重合较多时,可用该参数做一些调整,从而将数据分开点,防止重叠
  • dodge:控制组内分类是否彻底分拆
  • orient: “v” | “h”控制绘图的方向
  • color:{‘scatter’,'reg'}设置作图的方式
  • palette:调色板颜色{deep,muted,bright,pastel,dark,colorblind} 
  • size:默认为6,图的尺寸大小(正方形)。参数类型:numeric
  • edgecolor:边框颜色
  • linewidth:指定曲线的宽度

绘制Titanic数据集中SibSp属性与车票价格Fare的分布散点图,并通过hue='Sex‘再对散点图中的数值进行分类

#2.1.1左
sns.stripplot(x=train_data['SibSp'], y=train_data['Fare'], hue=train_data['Sex'], 
data=train_data, order=None,hue_order=None, jitter=False, dodge=False, orient=None,
color='scatter',palette='deep', size=5, edgecolor='gray', linewidth=0, ax=None)
plt.show()

#2.1.2右
#用order参数筛选分类类别
sns.stripplot(x=train_data['SibSp'], y=train_data['Fare'], hue=train_data['Sex'], 
data=train_data, order=[1,2],hue_order=None, jitter=False, dodge=False, orient=None, 
color='scatter',palette='deep', size=5, edgecolor='gray', linewidth=0, ax=None)
plt.show()

2.2swarmplot(分簇散点图)

Swarnplot与stripplot类似,但其不同之处在于它不会重叠数据点(适合小数据量)

seaborn.swarmplot(x=None, y=None, hue=None, data=None, order=None, 
hue_order=None, dodge=False, orient=None, color=None, palette=None, 
size=5, edgecolor='gray', linewidth=0, ax=None, **kwargs)

各参数含义如下:

  • x:设置分组统计字段
  • y:设置分布统计字段
  • hue :按照不同类别对样本数据进行分布散点图绘制,如在Titanic数据集中分为存活与否两类绘制年龄与票价等的图像
  • order:对x参数所选字段内的分类类别进行排序以及筛选
  • dodge:控制组内分类是否彻底分拆
  • orient: “v” | “h”控制绘图的方向
  • color:{‘scatter’,'reg'}设置作图的方式
  • palette:调色板颜色{deep,muted,bright,pastel,dark,colorblind} 
  • size:默认为5,图的尺寸大小(正方形)。参数类型:numeric
  • edgecolor:边框颜色
  • linewidth:指定曲线的宽度

绘制Titanic数据集中SibSp属性与车票价格Fare的分簇散点图,并通过hue='Sex‘再对散点图中的数值进行分类

#2.2.1左
sns.swarmplot(x=train_data['SibSp'], y=train_data['Fare'], hue=train_data['Sex'], 
data=train_data, order=None,hue_order=None,dodge=False, orient=None,
color='scatter',palette='deep', size=5, edgecolor='gray', linewidth=1, ax=None)
plt.show()
#2.2.2右
sns.swarmplot(x=train_data['SibSp'], y=train_data['Fare'], hue=train_data['Sex'], 
data=train_data, order=[1,2],hue_order=None,dodge=False, orient=None, 
color='scatter',palette='deep', size=5, edgecolor='gray', linewidth=1, ax=None)
plt.show()

3分类数据可视化-分布图

3.1boxplot

boxplot即为箱型图,用作显示一组数据分散情况,能够显示出一组数据的最大值、最小值、中位数及上下四分位数。图解如下:

seaborn.boxplot(x=None, y=None, hue=None, data=None, order=None, 
hue_order=None, orient=None, color=None, palette=None, saturation=0.75,width=0.8, 
dodge=True, fliersize=5, linewidth=None, whis=1.5, notch=False, ax=None, **kwargs)

各参数含义如下:

  • x:设置分组统计字段
  • y:设置分布统计字段
  • hue :按照不同类别对样本数据进行分布散点图绘制,如在Titanic数据集中分为存活与否两类绘制年龄与票价等的图像
  • order:对x参数所选字段内的分类类别进行排序以及筛选
  • hue_order:控制hue组类别的排序
  • orient: “v” | “h”控制绘图的方向
  • palette:调色板颜色{deep,muted,bright,pastel,dark,colorblind} 
  • saturation:饱和度
  • width:控制箱型图的宽度
  • dodge:控制组内分类是否彻底分拆
  • fliersize:用于指示离群值观察的标记大小,即异常点大小
  • linewidth:指定曲线的宽度
  • whis:whis=np.inf表示不显示箱线图的离群点,whis=n用以确定离群值的上下界(IQR超过低和高四分位数的比例),此范围外的点将被识别为异常值。IQR指的是上下四分位的差值。
  • notch:设置是否以中值做凹槽

绘制Titanic数据集中票价分布与存活与否的箱型图(并按照等级进行划分)同时与分簇散点图对比

可以看到,boxplot可以更清晰地显示出数据的分散情况

#3.1.1
sns.boxplot(x=train_data['Survived'], y=train_data['Fare'], hue=train_data['Pclass'], 
data=train_data, saturation=0.75,width=0.8,dodge=True, fliersize=5, whis=1.5)
plt.show()
#3.1.2右
sns.swarmplot(x=train_data['Survived'],y=train_data['Fare'], data=train_data,
color='scatter',palette='deep',size = 3,alpha = 0.8,hue=train_data['Pclass'])
plt.show()

3.2 violinplot

violinplot与boxplot很像,其是一种对称的kde图,小提琴图是箱线图与核密度图的结合,箱线图展示了分位数的位置,小提琴图则展示了任意位置的密度,通过小提琴图可以知道哪些位置的密度较高。在图中,白点是中位数,黑色盒型的范围是下四分位点到上四分位点,细黑线表示须。外部形状即为核密度估计(在概率论中用来估计未知的密度函数,属于非参数检验方法之一)。

seaborn.violinplot(x=None, y=None, hue=None, data=None, order=None, hue_order=None, 
bw='scott', cut=2, scale='area', scale_hue=True, gridsize=100, width=0.8, inner='box', 
split=False, dodge=True, orient=None, linewidth=None, color=None, palette=None, 
saturation=0.75, ax=None, **kwargs)

各参数含义如下:

  • x:设置分组统计字段
  • y:设置分布统计字段
  • hue :按照不同类别对样本数据进行分布散点图绘制,如在Titanic数据集中分为存活与否两类绘制年龄与票价等的图像
  • order:对x参数所选字段内的分类类别进行排序以及筛选
  • hue_order:控制hue组类别的排序
  • bw:带宽bandwidth控制对数据的拟合程度,与直方图中的bin(数据切分数量参数)大小非常相似seaborn的kdeplot支持四类核密度带方法,分别如下:

①scott (斯考特带宽法):是一种不进行自定义带宽的核带宽估计方法,是一种基于最优直方图的估计算法

②silverman (西尔弗曼带宽法):是一种基于经验法则的带宽估计方法

【以上两种方法均不用我们自定义核带宽,即完全可以视为默认值】

③scalar (标量带宽法):自定义标量,需要我们自己定义各种带宽,可以从不同的研究尺度去进行研究

④pair of scalars (标量对带宽法):暂无研究结果

  • cut:控制小提琴图外壳延伸超过内部极端数据点的密度。设置为0以将小提琴范围限制在观察数据的范围内
  • scale:该参数用于缩放每把小提琴的宽度,有“area”“count”“width”三种方式
  • scale_hue:当使用hue参数时,此参数确定缩放是在主要分组变量(scale_hue = true)的每个级别内还是在图上的所有小提琴             (scale_hue = false)内计算出来的。
  • gridsize:每个格网里面应该包含多少个点,越大表示格网里面的点越多,越平滑
  • width:控制钢琴图的宽度(比例)width=0.9,width=0.5...
  • inner:控制violinplot内部数据点的表示,有“box”箱型图“quartile”四分位数线“point”具体数据点“stick”具体数据棒四种方式。
  • split:将split设置为true则绘制分拆的violinplot以比较经过hue拆分后的两个量
  • dodge:控制组内分类是否彻底分拆
  • orient: “v” | “h”控制绘图的方向
  • linewidth:指定曲线的宽度
  • color:{‘scatter’,'reg'}设置作图的方式
  • palette:调色板颜色{deep,muted,bright,pastel,dark,colorblind} 
  • saturation:饱和度

分析Titanic数据集中不同等级船舱(或不同性别下)的年龄分布与生存与否的关系

~对比不同scale参数下的图像

#3.2.1左
sns.violinplot(x=train_data['Survived'], y=train_data['Age'], 
hue=train_data['Pclass'], data=train_data,bw='scott', cut=2, scale='area', 
scale_hue=True, gridsize=100, width=0.8, inner='box',split=False, dodge=True, 
orient=None, linewidth=None, color=None, palette='deep',saturation=0.75)
plt.show()

#3.2.2中
sns.violinplot(x=train_data['Survived'], y=train_data['Age'], 
hue=train_data['Pclass'], data=train_data,bw='scott', cut=2, scale='count', 
scale_hue=True, gridsize=100, width=0.8, inner='box',split=False, dodge=True, 
orient=None, linewidth=None, color=None, palette='deep',saturation=0.75)
plt.show()

#3.2.3右
sns.violinplot(x=train_data['Survived'],y=train_data['Age'],
hue=train_data['Pclass'], data=train_data,bw='scott', cut=2, scale='width', 
scale_hue=True, gridsize=100, width=0.8, inner='box',split=False, dodge=True, 
orient=None, linewidth=None, color=None, palette='deep',saturation=0.75)
plt.show()

                               【 area】                                                         【 count】                                                        【width】

~对比不同inner参数下的图像

#3.2.4左上
sns.violinplot(x=train_data['Survived'], y=train_data['Age'], 
hue=train_data['Pclass'], data=train_data,bw='scott', cut=4, 
scale='count', scale_hue=True, gridsize=100, width=0.8, inner='box',
split=False, dodge=True, orient=None, linewidth=None, color=None, 
palette='deep',saturation=0.75)
plt.show()

#3.2.5右上
sns.violinplot(x=train_data['Survived'], y=train_data['Age'], 
hue=train_data['Pclass'], data=train_data,bw='scott', cut=4, 
scale='count', scale_hue=True, gridsize=100, width=0.8, inner='quartile',
split=False, dodge=True, orient=None, linewidth=None, color=None, 
palette='deep',saturation=0.75)
plt.show()

#3.2.6左下
sns.violinplot(x=train_data['Survived'], y=train_data['Age'], 
hue=train_data['Pclass'], data=train_data,bw='scott', cut=4, 
scale='count', scale_hue=True, gridsize=100, width=0.8, inner='point',
split=False, dodge=True, orient=None, linewidth=None, color=None, 
palette='deep',saturation=0.75)
plt.show()

#3.2.7右下
sns.violinplot(x=train_data['Survived'], y=train_data['Age'], 
hue=train_data['Pclass'], data=train_data,bw='scott', cut=4, 
scale='count', scale_hue=True, gridsize=100, width=0.8, inner='stick',
split=False, dodge=True, orient=None, linewidth=None, color=None, 
palette='deep',saturation=0.75)
plt.show()

                                     【box】                                                                     【quartile】

                                   【point】                                                                     【stick】

3.3 lvplot

seaborn.lvplot(x=None, y=None, hue=None, data=None, order=None, hue_order=None, 
orient=None, color=None, palette=None, saturation=0.75, width=0.8, dodge=True, 
k_depth='proportion', linewidth=None, scale='exponential', outlier_prop=None, ax=None, 
**kwargs)

各参数含义如下:

  • x:设置分组统计字段
  • y:设置分布统计字段
  • hue :按照不同类别对样本数据进行分布散点图绘制,如在Titanic数据集中分为存活与否两类绘制年龄与票价等的图像
  • order:对x参数所选字段内的分类类别进行排序以及筛选
  • hue_order:控制hue组类别的排序
  • orient: “v” | “h”控制绘图的方向
  • color:{‘scatter’,'reg'}设置作图的方式
  • palette:调色板颜色{deep,muted,bright,pastel,dark,colorblind} 
  • saturation:饱和度
  • width:控制图的宽度(比例)即箱之间的间隔比例width=0.9,width=0.5...
  • dodge:控制组内分类是否彻底分拆
  • k_depth:设置框的数量{“proportion”,“tukey”,“trustworthy”}
  • scale:设置框的大小{“linear”,"exponential","area"}
  • linewidth:指定曲线的宽度
  • outlier_prop:奇异值

分析Titanic数据集中不同等级船舱(或不同性别下)的年龄分布与生存与否的关系

~对比不同k_depth参数下的图像

#3.3.1左
sns.lvplot(x='Survived', y='Age', hue='Pclass', data=train_data,orient=None,
color='scatter', palette='deep', saturation=0.75, width=0.8, dodge=True,
k_depth='proportion', scale='exponential', outlier_prop=None)
plt.show()

#3.3.2中
sns.lvplot(x='Survived', y='Age', hue='Pclass', data=train_data,orient=None,
color='scatter', palette='deep', saturation=0.75, width=0.8, dodge=True,
k_depth='tukey', scale='exponential', outlier_prop=None)
plt.show()

#3.3.3右
sns.lvplot(x='Survived', y='Age', hue='Pclass', data=train_data,orient=None,
color='scatter', palette='deep', saturation=0.75, width=0.8, dodge=True,
k_depth='trustworthy', scale='exponential', outlier_prop=None)
plt.show()

                       【proportion】                                                     【tukey】                                                    【trustworthy】

~对比不同scale参数下的图像

#3.3.4左
sns.lvplot(x='Survived', y='Age', hue='Pclass', data=train_data,orient=None, 
color='scatter', palette='deep', saturation=0.75, width=0.8, dodge=True,
k_depth='proportion', scale='linear', outlier_prop=None)
plt.show()

#3.3.5中
sns.lvplot(x='Survived', y='Age', hue='Pclass', data=train_data,orient=None,
color='scatter', palette='deep', saturation=0.75, width=0.8, dodge=True,
k_depth='proportion', scale='exponential', outlier_prop=None)
plt.show()

#3.3.6右
sns.lvplot(x='Survived', y='Age', hue='Pclass', data=train_data,orient=None,
color='scatter', palette='deep', saturation=0.75, width=0.8, dodge=True,
k_depth='proportion', scale='area', outlier_prop=None)
plt.show()

                            【linear】                                               【exponential】                                                 【area】

4分类数据可视化-统计图

4.1 barplot(直方图)

直方图,利用矩阵条的高度反映数值变量的集中趋势,并使用errorbar功能(差棒图)来估计变量之间的差值统计。

*barplot显示的是某种变量分布的平均值,当需要精确观察每类变量的分布趋势时,boxplot和violinplot是更好的选择。

seaborn.barplot(x=None, y=None, hue=None, data=None, order=None, hue_order=None, 
estimator=<function mean>, ci=95, n_boot=1000, units=None, orient=None, color=None, 
palette=None, saturation=0.75, errcolor='.26', errwidth=None, capsize=None, dodge=True, 
ax=None, **kwargs)

各参数含义如下:

  • x:设置分组统计字段
  • y:设置分布统计字段
  • hue :按照不同类别对样本数据进行分布散点图绘制,如在Titanic数据集中分为存活与否两类绘制年龄与票价等的图像
  • order:对x参数所选字段内的分类类别进行排序以及筛选
  • hue_order:控制hue组类别的排序
  • estimator=<function mean>:设置对每类变量的计算函数,默认为平均值mean,可修改为max,median等其他函数
  • ci:允许的误差范围(置信区间误差),控制误差棒的百分比在0-100之间,若ci=“sd”,则误差棒用标准误差,默认为95
  • n_boot:计算置信区间时使用的引导迭代次数(整数)
  • units:采样单元的标识符,用于执行多级引导和重复测量设计(数据变量或向量数据)
  • orient: “v” | “h”控制绘图的方向
  • color:{‘scatter’,'reg'}设置作图的方式
  • palette:调色板颜色{deep,muted,bright,pastel,dark,colorblind} 
  • saturation:饱和度
  • errorcolor:误差线颜色
  • errwidth:误差线宽度
  • capsize:设置误差棒帽条(上下两根横线)的宽度
  • dodge:控制组内分类是否彻底分拆

利用均值这一特性反映Titanic数据集不同等级中男女性别下的存活率(考虑到存活率用0/1表示,平均值即代表存货人数占总人数的比例)

#4.1.1
sns.barplot(x='Sex', y='Survived', hue='Pclass', data=train_data, order=None, 
hue_order=None,estimator=np.mean, ci=95, n_boot=1000, units=None, orient=None, 
color='scatter',palette='deep', saturation=0.75, errcolor='.26', errwidth=None, 
capsize=None, dodge=True)
plt.show()

print(train_data[['Sex',"Survived",'Pclass']].groupby(['Pclass','Sex']).mean())

Pclass

Sex

Survived

1

female

0.968085

male

0.368852

2

female

0.921053

male

0.157407

3

female

0.500000

male

0.135447

4.2 countplot(计数柱状图)

因子变量计数然后绘制条形图,相比barplot来说countplot中不能同时输入x和y,且countplot没有误差棒。

seaborn.countplot(x=None,y=None, hue=None, data=None, order=None, hue_order=None,
orient=None, color=None, palette=None, saturation=0.75, dodge=True, ax=None, **kwargs)

各参数含义如下:

  • x/y:设置分组统计字段
  • hue :按照不同类别对样本数据进行分布散点图绘制,如在Titanic数据集中分为存活与否两类绘制年龄与票价等的图像
  • order:对x参数所选字段内的分类类别进行排序以及筛选
  • hue_order:控制hue组类别的排序
  • orient: “v” | “h”控制绘图的方向
  • color:{‘scatter’,'reg'}设置作图的方式
  • palette:调色板颜色{deep,muted,bright,pastel,dark,colorblind} 
  • saturation:饱和度
  • dodge:控制组内分类是否彻底分拆

统计Titanic不同等级下存活及不存活的人数(横/纵)

#4.2.1左
sns.countplot(x="Survived", hue="Pclass", data=train_data,order=None, hue_order=None,
orient='v', color='scatter', palette='deep', saturation=0.75, dodge=True)
plt.show()

#4.2.2右
sns.countplot(y="Survived", hue="Pclass", data=train_data,order=None, hue_order=None,
orient='h', color='scatter', palette='deep', saturation=0.75, dodge=True)
plt.show()

4.3 pointplot(折线图)

seaborn.pointplot(x=None, y=None, hue=None, data=None, order=None, hue_order=None, 
estimator=(function mean), ci=95, n_boot=1000, units=None, markers='o', linestyles='-', 
dodge=False, join=True, scale=1, orient=None, color=None, palette=None, errwidth=None, 
capsize=None, ax=None, **kwargs)

各参数含义如下:

  • x:设置分组统计字段

  • y:设置分布统计字段

  • hue :按照不同类别对样本数据进行分布散点图绘制,如在Titanic数据集中分为存活与否两类绘制年龄与票价等的图像

  • order:对x参数所选字段内的分类类别进行排序以及筛选

  • hue_order:控制hue组类别的排序

  • estimator=<function mean>:设置对每类变量的计算函数,默认为平均值mean,可修改为max,median等其他函数

  • ci:允许的误差范围(置信区间误差),控制误差棒的百分比在0-100之间,若ci=“sd”,则误差棒用标准误差,默认为95

  • n_boot:计算置信区间时使用的引导迭代次数(整数)

  • units:采样单元的标识符,用于执行多级引导和重复测量设计(数据变量或向量数据)

  • markers:使用不同的形状,设置点样式。参数类型:list

  • linestyles:设置连接线类型

  • dodge:控制组内分类是否彻底分拆

  • join:是否连线join=True

  • scale:比例因子(float,optional)

  • orient: “v” | “h”控制绘图的方向

  • color:{‘scatter’,'reg'}设置作图的方式

  • palette:调色板颜色{deep,muted,bright,pastel,dark,colorblind} 

  • errorcolor:误差线颜色

  • errwidth:误差线宽度

  • capsize:设置误差棒帽条(上下两根横线)的宽度

绘制Titanic数据集中不同等级下各性别的车票价均值

#4.3.1左
sns.pointplot(x='Sex', y='Fare', hue='Pclass', data=train_data, order=None, 
hue_order=None,estimator=np.mean, ci=95, n_boot=1000, units=None, markers='o', 
linestyles='-',dodge=False, join=True, scale=1, orient=None, color='scatter', 
palette='deep', errwidth=None)
plt.show()

#4.3.2右
sns.pointplot(x='Sex', y='Fare', hue='Pclass', data=train_data, order=None, 
hue_order=None,estimator=np.mean, ci=95, n_boot=1000, units=None, markers='s', 
linestyles='--',dodge=False, join=True, scale=1, orient=None, color='scatter', 
palette='deep', errwidth=None)
plt.show()

7 factorplot

 

8 heatmap

seaborn.heatmap(data, vmin=None, vmax=None, cmap=None, center=None, robust=False,
annot=None, fmt=’.2g’, annot_kws=None, linewidths=0, linecolor=’white’, cbar=True, 
cbar_kws=None, cbar_ax=None, square=False, xticklabels=’auto’, yticklabels=’auto’, 
mask=None, ax=None, **kwargs)

各参数含义如下:

【1】输入数据参数

  • data:矩阵数据集,可以是numpy的数组(array),也可以是pandas的DataFrame。如果是DataFrame,则df的index/column信息会分别对应到heatmap的columns和rows,即pt.index是热力图的行标,pt.columns是热力图的列标

【2】颜色参数

  • vmin:热力图的颜色取值最小范围,默认是根据data数据表里的取值确定
  • vmax:热力图的颜色取值最大范围,默认是根据data数据表里的取值确定
  • cmap:从数字到色彩空间的映射,取值是matplotlib包里的colormap名称或颜色对象,或者表示颜色的列表;改参数默认值:根据center参数设定
  • center:数据表取值有差异时,设置热力图的色彩中心对齐值;通过设置center值,可以调整生成的图像颜色的整体深浅;设置center数据时,如果有数据溢出,则手动设置的vmax、vmin会自动改变 
  • robust:默认取值False;如果是False,且没设定vmin和vmax的值,热力图的颜色映射范围根据具有鲁棒性的分位数设定,而不是用极值设定

【3】注释参数

  • annot:默认取值False;如果是True,在热力图每个方格写入数据;如果是矩阵,在热力图每个方格写入该矩阵对应位置数据 
  • fmt:字符串格式代码,矩阵上标识数字的数据格式,比如保留小数点后几位数字 
  • annot_kws::默认取值False;如果是True,设置热力图矩阵上数字的大小颜色字体,matplotlib包text类下的字体设置

【4】矩阵块之间间隔及间隔线参数

  • linewidths:定义热力图里“表示两两特征关系的矩阵小块”之间的间隔大小 
  • linecolor:切分热力图上每个矩阵小块的线的颜色,默认值是’white’

【5】颜色刻度条参数

  • cbar:是否在热力图侧边绘制颜色刻度条,默认值是True 
  • cbar_kws:热力图侧边绘制颜色刻度条时,相关字体设置,默认值是None 
  • cbar_ax:热力图侧边绘制颜色刻度条时,刻度条位置设置,默认值是None
  • square:设置热力图矩阵小块形状,默认值是False 
  • xticklabels/yticklabels:控制每列(行)标签名的输出,默认值是auto。如果是True,则以DataFrame的列名作为标签名。如果是False,则不添加行标签名。如果是列表,则标签名改为列表中给的内容。如果是整数K,则在图上每隔K个标签进行一次标注。 如果是auto,则自动选择标签的标注间距,将标签名不重叠的部分(或全部)输出 
  • mask:控制某个矩阵块是否显示出来。默认值是None。如果是布尔型的DataFrame,则将DataFrame里True的位置用白色覆盖掉 

9 tsplot

 

 

 

 

参考资料:

https://blog.csdn.net/allenlu2008/article/details/53692154

https://blog.csdn.net/u013082989/article/details/73278458

https://blog.csdn.net/qq_39949963/article/details/79362501

https://www.cnblogs.com/kylinlin/p/5236601.html

https://blog.csdn.net/qq_39949963/article/details/80750492

https://www.jianshu.com/p/96977b9869ac

https://www.e-learn.cn/content/python/1204329

 

  • 2
    点赞
  • 43
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值