天天看点

Python可视化24|seaborn绘制多变量分布图(jointplot|JointGrid)1、绘图数据准备2、seaborn.jointplot3、seaborn.JointGrid

本文介绍两个变量之间的分布图(Draw a plot of two variables with bivariate and univariate graphs.)。
Python可视化24|seaborn绘制多变量分布图(jointplot|JointGrid)1、绘图数据准备2、seaborn.jointplot3、seaborn.JointGrid

本文内容速看

  • seaborn.jointplot绘制两个变量分布图
Python可视化24|seaborn绘制多变量分布图(jointplot|JointGrid)1、绘图数据准备2、seaborn.jointplot3、seaborn.JointGrid
  • seaborn.JointGrid绘制两个变量分布图(更个性化) 
Python可视化24|seaborn绘制多变量分布图(jointplot|JointGrid)1、绘图数据准备2、seaborn.jointplot3、seaborn.JointGrid

目录

1、绘图数据准备

2、seaborn.jointplot

图形基本设置

修改中部图

修改边际图

 kind参数设置

给中部散点图加上核密度图 

3、seaborn.JointGrid

sns.JointGrid基础使用 

分别绘制中心及边际图

分别个性化绘制边际图 

分别绘制x轴方向及y轴方向边际图 

1、绘图数据准备

还是鸢尾花iris数据集:鸢尾花iris数据集介绍

#导入本帖要用到的库,声明如下:
import matplotlib.pyplot as plt
import numpy as np
import pandas as pd 
import palettable
from pandas import Series,DataFrame
from sklearn import datasets
import seaborn as sns
import palettable
#导入鸢尾花iris数据集(方法一)
#该方法更有助于理解数据集
iris=datasets.load_iris()
x, y =iris.data,iris.target
y_1 = np.array(['setosa' if i==0 else 'versicolor' if i==1 else 'virginica' for i in y])
pd_iris = pd.DataFrame(np.hstack((x, y_1.reshape(150,1))),columns=['sepal length(cm)','sepal width(cm)','petal length(cm)','petal width(cm)','class'])
 
#astype修改pd_iris中数据类型object为float64
pd_iris['sepal length(cm)']=pd_iris['sepal length(cm)'].astype('float64')
pd_iris['sepal width(cm)']=pd_iris['sepal width(cm)'].astype('float64')
pd_iris['petal length(cm)']=pd_iris['petal length(cm)'].astype('float64')
pd_iris['petal width(cm)']=pd_iris['petal width(cm)'].astype('float64')
 
 
#导入鸢尾花iris数据集(方法二)
#该方法有时候会卡巴斯基,所以弃而不用
#import seaborn as sns
#iris_sns = sns.load_dataset("iris")
           

 数据集浏览下

Python可视化24|seaborn绘制多变量分布图(jointplot|JointGrid)1、绘图数据准备2、seaborn.jointplot3、seaborn.JointGrid

2、seaborn.jointplot

seaborn.jointplot(x, y, data=None, kind='scatter', stat_func=None, color=None, height=6, ratio=5, space=0.2, dropna=True, xlim=None, ylim=None, joint_kws=None, marginal_kws=None, annot_kws=None, **kwargs)

同时绘制两个变量之间的分布图(Draw a plot of two variables with bivariate and univariate graphs.)

该图由三部分组成:

  • 中间两变量关系图
  • 上部x轴变量分布边际图
  • 右侧y轴变量分布边际图
  • 图形基本设置

sns.set(style="white",font_scale=1.5)#设置主题,文本大小
g = sns.jointplot(x='sepal length(cm)', y='sepal width(cm)', data=pd_iris,#输入两个绘图变量
                 color='#098154',#修改颜色
                 )
g.fig.set_size_inches(10,8)#设置图尺寸
           
Python可视化24|seaborn绘制多变量分布图(jointplot|JointGrid)1、绘图数据准备2、seaborn.jointplot3、seaborn.JointGrid
  • 修改中部图

sns.set(style="white",font_scale=1.5)
g = sns.jointplot(x='sepal length(cm)', y='sepal width(cm)', data=pd_iris,
                  color='#098154',
                  height=5, #中部图高度(中部图为正方形)
                  ratio=2,#中部图与边际图尺寸比
                  marker='^',#修改散点marker
                 )
g.fig.set_size_inches(10,8) 
           
Python可视化24|seaborn绘制多变量分布图(jointplot|JointGrid)1、绘图数据准备2、seaborn.jointplot3、seaborn.JointGrid
  • 修改边际图

边际图是一个直方图hist,更多详细设置可参考::

sns.set(style="white",font_scale=1.5)

g = sns.jointplot(x='sepal length(cm)', y='sepal width(cm)', data=pd_iris,

color='#098154',

marginal_kws=dict(bins=15, #hist箱子个数

kde=True,#开启核密度图

color='#c72e29',#直方图hist填充色

),

)

g.fig.set_size_inches(10,8)

Python可视化24|seaborn绘制多变量分布图(jointplot|JointGrid)1、绘图数据准备2、seaborn.jointplot3、seaborn.JointGrid
  •  kind参数设置

包含五个选项,即'scatter,reg,resid,kde,hex',默认为scatter,下面看看各类是什么样子。

for i in list('scatter,reg,resid,kde,hex'.split(',')):
    sns.set(style="white",font_scale=1.5)
    g = sns.jointplot(x='sepal length(cm)', y='sepal width(cm)', data=pd_iris,
                      color='#098154',
                      kind=i,#scatter(默认),可选reg,resid,kde,hex
                     )
    g.fig.set_size_inches(10,8)  
           
Python可视化24|seaborn绘制多变量分布图(jointplot|JointGrid)1、绘图数据准备2、seaborn.jointplot3、seaborn.JointGrid
Python可视化24|seaborn绘制多变量分布图(jointplot|JointGrid)1、绘图数据准备2、seaborn.jointplot3、seaborn.JointGrid
Python可视化24|seaborn绘制多变量分布图(jointplot|JointGrid)1、绘图数据准备2、seaborn.jointplot3、seaborn.JointGrid
Python可视化24|seaborn绘制多变量分布图(jointplot|JointGrid)1、绘图数据准备2、seaborn.jointplot3、seaborn.JointGrid
Python可视化24|seaborn绘制多变量分布图(jointplot|JointGrid)1、绘图数据准备2、seaborn.jointplot3、seaborn.JointGrid
  • 给中部散点图加上核密度图 

sns.set(style="white",font_scale=1.5)#设置主题,文本大小
#sns.set_style("white", {"axes.facecolor": "#d5e4eb"})#自定义背景色
g = sns.jointplot(x='sepal length(cm)', y='sepal width(cm)', data=pd_iris,#输入两个绘图变量
                 color='#098154',
                 )
g.fig.set_size_inches(10,8)#设置图尺寸
g.plot_joint(sns.kdeplot, zorder=0, n_levels=6,color='red')
           
Python可视化24|seaborn绘制多变量分布图(jointplot|JointGrid)1、绘图数据准备2、seaborn.jointplot3、seaborn.JointGrid

 以上只是基础玩法,高级玩法还得seaborn.jointplot的底层seaborn.JointGrid上场

3、seaborn.JointGrid

class seaborn.JointGrid(x, y, data=None, height=6, ratio=5, space=0.2, dropna=True, xlim=None, ylim=None, size=None)

seaborn.JointGrid是seaborn.jointplot的底层,个人理解类似于seaborn的底层是matplotlib一般。

  • sns.JointGrid基础使用 

g = sns.JointGrid(x='sepal length(cm)', y='sepal width(cm)', data=pd_iris,#一张画布
                 )
g = g.plot(sns.regplot, sns.distplot,)#画布上绘制三张图
g.fig.set_size_inches(10,8)#设置图尺寸
           
Python可视化24|seaborn绘制多变量分布图(jointplot|JointGrid)1、绘图数据准备2、seaborn.jointplot3、seaborn.JointGrid
  • 分别绘制中心及边际图

g = sns.JointGrid(x='sepal length(cm)', y='sepal width(cm)', data=pd_iris,)
g.fig.set_size_inches(10,8)
g = g.plot_joint(sns.scatterplot, color='g',marker='$\clubsuit$',s=340)#中心绘制散点图
g = g.plot_marginals(sns.distplot, kde=True, color='#c72e29')#边际绘制hist直方图
           
Python可视化24|seaborn绘制多变量分布图(jointplot|JointGrid)1、绘图数据准备2、seaborn.jointplot3、seaborn.JointGrid
  • 分别个性化绘制边际图  

g = sns.JointGrid(x='sepal length(cm)', y='sepal width(cm)', data=pd_iris, space=0)
g.fig.set_size_inches(10,8)
g = g.plot_joint(sns.scatterplot, color='g',marker='$\clubsuit$',s=340)

#x轴方向边际图
g.ax_marg_x.hist(pd_iris['sepal length(cm)'], color='#01a2d9', alpha=1,
                 bins=15,
                 
                )

#y轴方向边际图
g.ax_marg_y.hist(pd_iris['sepal width(cm)'], color='#c72e29', alpha=1,
                    orientation="horizontal",
                   bins=15)
plt.show()
           
Python可视化24|seaborn绘制多变量分布图(jointplot|JointGrid)1、绘图数据准备2、seaborn.jointplot3、seaborn.JointGrid
  • 分别绘制x轴方向及y轴方向边际图 

#每个边际图是一个matplotlib.axes._subplots.AxesSubplot对象,可自由发挥绘制想要的图
g = sns.JointGrid(x='sepal length(cm)', y='sepal width(cm)', data=pd_iris, space=0)
g.fig.set_size_inches(10,8)
g = g.plot_joint(sns.scatterplot, color='g',marker='$\clubsuit$',s=340)

#x轴方向边际图
g.ax_marg_x.hist(pd_iris['sepal length(cm)'], color='#01a2d9', alpha=1,bins=15)

#y轴方向绘制箱图
g.ax_marg_y.boxplot(pd_iris['sepal width(cm)'],boxprops={'color':'r',})
plt.show()
           
Python可视化24|seaborn绘制多变量分布图(jointplot|JointGrid)1、绘图数据准备2、seaborn.jointplot3、seaborn.JointGrid

 参考资料:

  • http://seaborn.pydata.org/generated/seaborn.jointplot.html#seaborn.jointplot
  • http://seaborn.pydata.org/generated/seaborn.JointGrid.html#seaborn.JointGrid
Python可视化24|seaborn绘制多变量分布图(jointplot|JointGrid)1、绘图数据准备2、seaborn.jointplot3、seaborn.JointGrid