Python可视化24|seaborn绘制多变量分布图(jointplot|JointGrid)
"pythonic生物人"的第69篇分享
本文介绍两个变量之间的分布图(Draw a plot of two variables with bivariate and univariate graphs.)。
本文内容速看
seaborn.jointplot绘制两个变量分布图
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")
数据集浏览下
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)#设置图尺寸
修改中部图
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)
修改边际图
边际图是一个直方图hist,更多详细设置可参考:seaborn直方图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)
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)
给中部散点图加上核密度图
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')
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)#设置图尺寸
分别绘制中心及边际图
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直方图
分别个性化绘制边际图
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()
分别绘制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()
http://seaborn.pydata.org/generated/seaborn.jointplot.html#seaborn.jointplot http://seaborn.pydata.org/generated/seaborn.JointGrid.html#seaborn.JointGrid