当前位置: 代码迷 >> 综合 >> Python可视化26|seaborn绘制分面图(seaborn.FacetGrid)
  详细解决方案

Python可视化26|seaborn绘制分面图(seaborn.FacetGrid)

热度:51   发布时间:2024-02-13 17:12:11.0
  • 本文介绍seaborn绘制分面图,即将一个数据集按某类,分行或分列显示为多个子图;
  • 前面文章介绍的seaborn.catplot、seaborn.pairplot、seaborn.lmplot生成分面图的底层就是本文的主角seaborn.FacetGrid。
  • seaborn.FacetGrid可更个性化的调整子图的 axis labels, ticks, legend等。

本文速览

 

目录

1、绘图数据集准备

2、seaborn.FacetGrid

按行绘制分面直方图 

按列绘制分面直方图 

 同时按行和列绘制分面直方图

同时按行和列绘制分面散点图

图个性化设置 


 

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')

数据集简要查看及统计

 

  

2、seaborn.FacetGrid

seaborn.FacetGrid(data, row=None, col=None, hue=None, col_wrap=None, sharex=True, sharey=True, height=3, aspect=1, palette=None, row_order=None, col_order=None, hue_order=None, hue_kws=None, dropna=True, legend_out=True, despine=True, margin_titles=False, xlim=None, ylim=None, subplot_kws=None, gridspec_kws=None, size=None)

  • 按行绘制分面直方图 

g = sns.FacetGrid(pd_iris, col='class')#按行绘制col='class'
g.map(plt.hist, 'sepal length(cm)',color='#C21F30')#设置绘图模式
g.fig.set_size_inches(12,6)
sns.set(style='whitegrid',font_scale=1.5)

 

  • 按列绘制分面直方图 

g = sns.FacetGrid(pd_iris, row='class',)#按列显示row='class'
g.map(plt.hist, 'sepal length(cm)',color='#68B88E')
g.fig.set_size_inches(8,12)
sns.set(style='whitegrid',font_scale=1.5)

 

  •  同时按行和列绘制分面直方图

#给数据加一列花期(上、下旬)
flowering=pd.Series(['early' if i>4.0 and i<5.0 else 'middle' for i in pd_iris['sepal length(cm)']])
pd_iris1=pd.concat([pd_iris,flowering],axis=1)#拼接,默认按行拼接,即axis=0
pd_iris1.rename(columns={0:'flowering'}, inplace = True)#替换列名称g = sns.FacetGrid(pd_iris1,row='flowering',col='class',height=4)#行按花期,列按class绘图
g.map(plt.hist, 'sepal length(cm)',color='#C21F30')
plt.figure(dpi=200)
g.fig.set_size_inches(12,8)
sns.set(style='whitegrid',font_scale=1.2)

 

  • 同时按行和列绘制分面散点图

g = sns.FacetGrid(pd_iris1,col='flowering',col_order=['early','middle'],row='class',hue='class',hue_kws={"marker": ["^", "s", "D"]},               palette='Set1',height=5)
g.map(plt.scatter, 'sepal length(cm)','sepal width(cm)',#绘制散点图**dict(s=100, linewidth=.5, edgecolor="w"),).add_legend()
g.fig.set_size_inches(12,10)
sns.set(style='whitegrid',font_scale=1.2)

 

  • 图个性化设置 

比如设置图的spines、axis labels 、titles、axis tick labels等。

g = sns.FacetGrid(pd_iris1,col='flowering',col_order=['early','middle'],hue='class',#hue_kws={"marker": ["^", "s", "D"]},#设置marker                  palette='Set1',height=5,margin_titles=True,)
g=(g.map(plt.scatter, 'sepal length(cm)','sepal width(cm)',**dict(s=100, linewidth=.5, edgecolor="w")))#设置散点的size、外框线宽和颜色     
g.add_legend()#设置figure的x轴及y轴标签
g.set_axis_labels("SepalLength (cm)", "SepalWidth (cm)",)#设置子图(subplot Axes)属性
g.set(xlim=(4, 8), #x轴刻度显示范围ylim=(1, 5),#y轴刻度范围xticks=[4, 6, 8], #x轴刻度标签yticks=[1, 2.5, 5],#y轴刻度标签)#设置子图标题
g.set_titles("flowering|{col_name}")g.fig.set_size_inches(10,6)
sns.set(style='whitegrid',font_scale=1.2)

 

 参考资料:

  • http://seaborn.pydata.org/generated/seaborn.FacetGrid.html#seaborn.FacetGrid
  • http://seaborn.pydata.org/tutorial/axis_grids.html 

本文结束,欢迎微信搜索关注,pythonic生物人。