"pythonic生物人"的第70篇分享
。
- 矩阵图即用一张图绘制多个变量之间的关系,数据挖掘中常用于初期数据探索;
- 本文介绍python中seaborn.pairplot(傻瓜版)和seaborn.PairGrid(更个性化版)绘制矩阵图
本文内容速览
目录
1、绘图数据准备
2、seaborn.pairplot
加上分类变量
修改调色盘
x,y轴方向选取相同子集
x,y轴方向选取不同子集
非对角线散点图加趋势线
对角线上的四个图绘制方式
只显示网格下三角图形
图形外观设置
3、seaborn.PairGrid(更灵活的绘制矩阵图)
每个子图绘制同类型的图
对角线和非对角线分别绘制不同类型图
对角线上方、对角线、对角线下方分别绘制不同类型图
其它一些参数修改
1、绘图数据准备
2、seaborn.pairplot
加上分类变量
修改调色盘
x,y轴方向选取相同子集
x,y轴方向选取不同子集
非对角线散点图加趋势线
对角线上的四个图绘制方式
只显示网格下三角图形
图形外观设置
3、seaborn.PairGrid(更灵活的绘制矩阵图)
每个子图绘制同类型的图
对角线和非对角线分别绘制不同类型图
对角线上方、对角线、对角线下方分别绘制不同类型图
其它一些参数修改
1、绘图数据准备
还是使用鸢尾花iris数据集
#导入本帖要用到的库,声明如下:
import matplotlib.pyplot as plt
import numpy as np
import pandas as pd
from pandas import Series,DataFrame
from sklearn import datasets
import seaborn as sns
#导入鸢尾花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")
#导入本帖要用到的库,声明如下:
import matplotlib.pyplot as plt
import numpy as np
import pandas as pd
from pandas import Series,DataFrame
from sklearn import datasets
import seaborn as sns
#导入鸢尾花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.pairplot
语法:seaborn.pairplot(data, hue=None, hue_order=None, palette=None, vars=None, x_vars=None, y_vars=None, kind='scatter', diag_kind='auto', markers=None, height=2.5, aspect=1, corner=False, dropna=True, plot_kws=None, diag_kws=None, grid_kws=None, size=None)
g = sns.pairplot(pd_iris)
g.fig.set_size_inches(12,12)#figure大小
sns.set(style='whitegrid',font_scale=1.5)#文本大小
g = sns.pairplot(pd_iris)
g.fig.set_size_inches(12,12)#figure大小
sns.set(style='whitegrid',font_scale=1.5)#文本大小
对角线4张图是变量自身的分布直方图;非对角线的 12 张就是某个变量和另一个变量的关系。
加上分类变量
g = sns.pairplot(pd_iris,
hue='class'#按照三种花分类
)
sns.set(style='whitegrid')
g.fig.set_size_inches(12,12)
sns.set(style='whitegrid',font_scale=1.5)
g = sns.pairplot(pd_iris,
hue='class'#按照三种花分类
)
sns.set(style='whitegrid')
g.fig.set_size_inches(12,12)
sns.set(style='whitegrid',font_scale=1.5)
修改调色盘
可以使用Matplotlib、seaborn、颜色号list等色盘。可参考:python调色盘
import palettable
g = sns.pairplot(pd_iris,
hue='class',
palette=palettable.cartocolors.qualitative.Bold_9.mpl_colors,#palettable颜色盘
)
sns.set(style='whitegrid')
g.fig.set_size_inches(12,12)
sns.set(style='whitegrid',font_scale=1.5)
import palettable
g = sns.pairplot(pd_iris,
hue='class',
palette=palettable.cartocolors.qualitative.Bold_9.mpl_colors,#palettable颜色盘
)
sns.set(style='whitegrid')
g.fig.set_size_inches(12,12)
sns.set(style='whitegrid',font_scale=1.5)
g = sns.pairplot(pd_iris,
hue='class',
palette='Set1',#Matplotlib颜色
)
sns.set(style='whitegrid')
g.fig.set_size_inches(12,12)
sns.set(style='whitegrid',font_scale=1.5)
g = sns.pairplot(pd_iris,
hue='class',
palette='Set1',#Matplotlib颜色
)
sns.set(style='whitegrid')
g.fig.set_size_inches(12,12)
sns.set(style='whitegrid',font_scale=1.5)
g = sns.pairplot(pd_iris,
hue='class',
palette=['#dc2624', '#2b4750', '#45a0a2'],#使用传入的颜色list
)
sns.set(style='whitegrid')
g.fig.set_size_inches(12,12)
sns.set(style='whitegrid',font_scale=1.5)
g = sns.pairplot(pd_iris,
hue='class',
palette=['#dc2624', '#2b4750', '#45a0a2'],#使用传入的颜色list
)
sns.set(style='whitegrid')
g.fig.set_size_inches(12,12)
sns.set(style='whitegrid',font_scale=1.5)
x,y轴方向选取相同子集
import palettable
g = sns.pairplot(pd_iris,
hue='class',
palette=palettable.cartocolors.qualitative.Bold_9.mpl_colors,
vars=['sepal length(cm)','sepal width(cm)'],#x,y轴方向选取相同子集绘图
)
sns.set(style='whitegrid')
g.fig.set_size_inches(12,6)
sns.set(style='whitegrid',font_scale=1.5)
import palettable
g = sns.pairplot(pd_iris,
hue='class',
palette=palettable.cartocolors.qualitative.Bold_9.mpl_colors,
vars=['sepal length(cm)','sepal width(cm)'],#x,y轴方向选取相同子集绘图
)
sns.set(style='whitegrid')
g.fig.set_size_inches(12,6)
sns.set(style='whitegrid',font_scale=1.5)
x,y轴方向选取不同子集
import palettable
g = sns.pairplot(pd_iris,
hue='class',
palette=palettable.cartocolors.qualitative.Bold_9.mpl_colors,
x_vars=['sepal length(cm)','sepal width(cm)'],#x,y轴方向选取不同子集
y_vars=['petal length(cm)','petal width(cm)'],
)
sns.set(style='whitegrid')
g.fig.set_size_inches(12,6)
sns.set(style='whitegrid',font_scale=1.5)
import palettable
g = sns.pairplot(pd_iris,
hue='class',
palette=palettable.cartocolors.qualitative.Bold_9.mpl_colors,
x_vars=['sepal length(cm)','sepal width(cm)'],#x,y轴方向选取不同子集
y_vars=['petal length(cm)','petal width(cm)'],
)
sns.set(style='whitegrid')
g.fig.set_size_inches(12,6)
sns.set(style='whitegrid',font_scale=1.5)
非对角线散点图加趋势线
import palettable
g = sns.pairplot(pd_iris,
hue='class',
palette=palettable.cartocolors.qualitative.Bold_9.mpl_colors,
kind='reg',#默认为scatter,reg加上趋势线
)
sns.set(style='whitegrid')
g.fig.set_size_inches(12,12)
sns.set(style='whitegrid',font_scale=1.5)
import palettable
g = sns.pairplot(pd_iris,
hue='class',
palette=palettable.cartocolors.qualitative.Bold_9.mpl_colors,
kind='reg',#默认为scatter,reg加上趋势线
)
sns.set(style='whitegrid')
g.fig.set_size_inches(12,12)
sns.set(style='whitegrid',font_scale=1.5)
对角线上的四个图绘制方式
可选参数为‘auto’, ‘hist’(默认), ‘kde’, None。
import palettable
g = sns.pairplot(pd_iris,
hue='class',
palette=palettable.cartocolors.qualitative.Bold_9.mpl_colors,
diag_kind='hist',#hist直方图
)
sns.set(style='whitegrid')
g.fig.set_size_inches(12,12)
sns.set(style='whitegrid',font_scale=1.5)
import palettable
g = sns.pairplot(pd_iris,
hue='class',
palette=palettable.cartocolors.qualitative.Bold_9.mpl_colors,
diag_kind='hist',#hist直方图
)
sns.set(style='whitegrid')
g.fig.set_size_inches(12,12)
sns.set(style='whitegrid',font_scale=1.5)
只显示网格下三角图形
import palettable
g = sns.pairplot(pd_iris,
hue='class',
palette='Set1',
corner=True#图形显示左下角
)
g.fig.set_size_inches(12,12)
sns.set(font_scale=1.5)
import palettable
g = sns.pairplot(pd_iris,
hue='class',
palette='Set1',
corner=True#图形显示左下角
)
g.fig.set_size_inches(12,12)
sns.set(font_scale=1.5)
图形外观设置
import palettable
g = sns.pairplot(pd_iris,
hue='class',
palette='Set1',
markers=['$\clubsuit,'.','+'],#散点图的marker
plot_kws=dict(s=50, edgecolor="r", linewidth=1),#非对角线上的图marker大小、外框、外框线宽
diag_kws=dict(shade=True)#对角线上核密度图是否填充
)
g.fig.set_size_inches(12,12)
sns.set(font_scale=1.5)
import palettable
g = sns.pairplot(pd_iris,
hue='class',
palette='Set1',
markers=['$\clubsuit,'.','+'],#散点图的marker
plot_kws=dict(s=50, edgecolor="r", linewidth=1),#非对角线上的图marker大小、外框、外框线宽
diag_kws=dict(shade=True)#对角线上核密度图是否填充
)
g.fig.set_size_inches(12,12)
sns.set(font_scale=1.5)
3、seaborn.PairGrid(更灵活的绘制矩阵图)
seaborn.PairGrid(data, hue=None, hue_order=None, palette=None, hue_kws=None, vars=None, x_vars=None, y_vars=None, corner=False, diag_sharey=True, height=2.5, aspect=1, layout_pad=0, despine=True, dropna=True, size=None)
每个子图绘制同类型的图
g = sns.PairGrid(pd_iris,
hue='class',
palette='husl',)
g = g.map(plt.scatter)#map每个子图绘制一样类型的图
g = g.add_legend()
g.fig.set_size_inches(12,12)
sns.set(style='whitegrid',font_scale=1.5)
g = sns.PairGrid(pd_iris,
hue='class',
palette='husl',)
g = g.map(plt.scatter)#map每个子图绘制一样类型的图
g = g.add_legend()
g.fig.set_size_inches(12,12)
sns.set(style='whitegrid',font_scale=1.5)
对角线和非对角线分别绘制不同类型图
g = sns.PairGrid(pd_iris,
hue='class',
palette='Set1',)
g = g.map_diag(plt.hist)#对角线绘制直方图
g = g.map_offdiag(plt.scatter)#非对角线绘制散点图
g = g.add_legend()
g.fig.set_size_inches(12,12)
sns.set(style='whitegrid',font_scale=1.5)
g = sns.PairGrid(pd_iris,
hue='class',
palette='Set1',)
g = g.map_diag(plt.hist)#对角线绘制直方图
g = g.map_offdiag(plt.scatter)#非对角线绘制散点图
g = g.add_legend()
g.fig.set_size_inches(12,12)
sns.set(style='whitegrid',font_scale=1.5)
对角线上方、对角线、对角线下方分别绘制不同类型图
g = sns.PairGrid(pd_iris, hue='class',)
g = g.map_upper(sns.scatterplot)
g = g.map_lower(sns.kdeplot, colors="C0")
g = g.map_diag(sns.kdeplot, lw=2)3绘制核密度图
g = g.add_legend()#添加图例
sns.set(style='whitegrid',font_scale=1.5)
g = sns.PairGrid(pd_iris, hue='class',)
g = g.map_upper(sns.scatterplot)
g = g.map_lower(sns.kdeplot, colors="C0")
g = g.map_diag(sns.kdeplot, lw=2)3绘制核密度图
g = g.add_legend()#添加图例
sns.set(style='whitegrid',font_scale=1.5)
其它一些参数修改
g = sns.PairGrid(pd_iris, hue='class',
palette='Set1',
hue_kws={"marker": ["^", "s", "D"]},#设置marker
diag_sharey=False,
)
g = g.map_upper(sns.scatterplot,edgecolor="w", s=40)#设置点大小,外框颜色
g = g.map_lower(sns.kdeplot, colors="#01a2d9")#设置下三角图形颜色
g = g.map_diag(sns.kdeplot, lw=3)#对角图形颜色
g = g.add_legend()#添加图例
g.fig.set_size_inches(12,12)
sns.set(style='whitegrid',font_scale=1.5)
g = sns.PairGrid(pd_iris, hue='class',
palette='Set1',
hue_kws={"marker": ["^", "s", "D"]},#设置marker
diag_sharey=False,
)
g = g.map_upper(sns.scatterplot,edgecolor="w", s=40)#设置点大小,外框颜色
g = g.map_lower(sns.kdeplot, colors="#01a2d9")#设置下三角图形颜色
g = g.map_diag(sns.kdeplot, lw=3)#对角图形颜色
g = g.add_legend()#添加图例
g.fig.set_size_inches(12,12)
sns.set(style='whitegrid',font_scale=1.5)
参考资料:
同系列文章
Python可视化23|seaborn.distplot单变量分布图(直方图|核密度图)Python可视化24|seaborn绘制多变量分布图(jointplot|JointGrid)Python可视化18|seborn-seaborn调色盘(六) "点赞"、