美文网首页
Python数据分析与机器学习11-Seaborn之FacetG

Python数据分析与机器学习11-Seaborn之FacetG

作者: 只是甲 | 来源:发表于2022-07-12 11:12 被阅读0次

    FacetGrid结构图 概述

    FacetGrid 可以通过 col 和 row 等参数来一次性构建多个图形。
    relplot 、catplot 、lmplot 等函数可以通过 col 、row 等在一个 Figure 中绘制多个图。这个函数之所以有这些功能,是因为函数底层使用了 FacetGrid 来组装这些图形。
    FacetGrid 绘图的 x 和 y 参数必须为 DataFrame 的列的名字。而直接使用 Axes 绘图,参数更灵活。

    一. 普通的 Axes 绘图

    实际上 Seaborn 的绘图函数中也有大量的直接使用 Axes 进行绘图的,凡是函数名中已经明确显示了这个图的类型,这种图都是使用 Axes 绘图的。比如 sns.scatterplot 、sns.lineplot 、 sns.barplot 等。 Axes 绘图可以直接使用之前的 matplotlib 的一些方式设置图的元素。

    1.1 散点图

    代码:

    import seaborn as sns
    import matplotlib.pyplot as plt
    import pandas as pd
    import numpy as np
    
    tips = pd.read_csv('E:/file/tips.csv')
    #scatterplot绘图返回一个Axes对象
    axes = sns.scatterplot(x="total_bill",y="tip",data=tips)
    #利用Axes对象的函数设置一些属性
    axes.set_xticks(range(0,60,5))
    
    plt.show()
    

    测试记录:

    image.png

    1.2 散点图+柱形图

    代码:

    import seaborn as sns
    import matplotlib.pyplot as plt
    import pandas as pd
    import numpy as np
    
    tips = pd.read_csv('E:/file/tips.csv')
    
    fig,[ax1,ax2] = plt.subplots(1,2,figsize=(20,5))
    #z绘制散点图
    #ax参数指定Axes对象
    sns.scatterplot(x="total_bill",y="tip",data=tips,ax=ax1)
    #绘制柱状图
    sns.barplot(x="day",y="total_bill",data=tips,ax=ax2)
    
    plt.show()
    

    测试记录:

    image.png

    1.3 scatterplot的参数可以为数组

    代码:

    import seaborn as sns
    import matplotlib.pyplot as plt
    import pandas as pd
    import numpy as np
    
    tips = pd.read_csv('E:/file/tips.csv')
    
    #scatterplot的参数可以为数组等形式的数据
    sns.scatterplot(x=tips['total_bill'],y='tip',data=tips)
    
    plt.show()
    

    测试记录:

    image.png

    二. FacetGrid 基本使用

    先创建一个 FacetGrid 对象,然后再调用这个对象的 map 方法。其中 map 为方法的第一个参数是一个函数,后续 map 将调用这个函数来绘制图形。后面的参数就是传给这个函数的参数。
    其中第一个参数是可以绘制 Axes 图,并且可以接受 color 参数的函数。可以取的值如下:


    image.png

    代码:

    import seaborn as sns
    import matplotlib.pyplot as plt
    import pandas as pd
    import numpy as np
    
    tips = pd.read_csv('E:/file/tips.csv')
    
    #绘制散点图
    g1 = sns.FacetGrid(tips)
    g1.map(plt.scatter,"total_bill","tip")
    
    plt.show()
    

    测试记录:

    image.png

    三. 绘制多个图形

    FacetGrid 可以通过 col 和 row 参数在一个 Figure 上绘制多个图形,其中 col 和 row 都是数据集中的某个列的名字。只要指定这个名字,那么就会自动的按照指定列的值的个数绘制指定个数的图形。

    代码:

    import seaborn as sns
    import matplotlib.pyplot as plt
    import pandas as pd
    import numpy as np
    
    tips = pd.read_csv('E:/file/tips.csv')
    
    #绘制多个图
    g2 = sns.FacetGrid(tips,col="day",col_wrap=2)
    g2.map(plt.scatter,"total_bill","tip")
    
    plt.show()
    

    测试记录:

    image.png

    五. 设置每个图形的尺寸

    使用 FacetGrid 绘制出图形后,如果设置每个图形的尺寸或者是宽高比,可以通过在 FacetGrid 中设置 height 和 aspect 来实现,其中 height 表示的是每个图形的尺寸(默认是宽高一致),aspect 表示的是 宽度/高度 的比例。

    代码:

    import seaborn as sns
    import matplotlib.pyplot as plt
    import pandas as pd
    import numpy as np
    
    tips = pd.read_csv('E:/file/tips.csv')
    
    # 设置高度
    g3 = sns.FacetGrid(tips,col="smoker",height=4,aspect=1.5)
    g3.map(sns.barplot,"day","total_bill")
    
    plt.show()
    

    测试记录:

    image.png

    六. 设置图例

    默认情况下不会添加图例,我们可以通过 g.add_legend() 来添加图例。
    (1)通过 title 来控制图例的标题
    (2)通过 label_order 来控制图例元素的顺序

    代码:

    import seaborn as sns
    import matplotlib.pyplot as plt
    import pandas as pd
    import numpy as np
    
    tips = pd.read_csv('E:/file/tips.csv')
    
    # 设置图例
    sns.set(rc={"font.sans-serif":"SimHei"})
    g2 = sns.FacetGrid(tips,col="day",hue="time")
    g2.map(plt.scatter,"total_bill","tip")
    #添加图例
    g2.add_legend(title="标题",label_order=['Lunch','Dinner'])
    new_labels = ['午餐','晚餐']
    for text,label in zip(g2._legend.texts,new_labels):
        text.set_text(label)
    
    plt.show()
    

    测试记录:

    image.png

    七. 设置标题

    设置标题可以通过 g.set_titles(template=None,row_template=None,col_template=None) 来实现,这三个参数分别代表的意义如下:
    (1)template:给图设置标题,其中有 {row_var}:绘制每行图像的名称,{row_name}:绘制每行图像的值,{col_var}:绘制每列图像的名称,{col_name}:绘制每列图像的值
    (2)col_template:给图像设置列的标题,其中有 {col_var} 以及 {col_name} 可以使用
    (3)row_template:给图像设置行的标题,其中有 {row_var} 以及 {row_name} 可以使用

    代码:

    import seaborn as sns
    import matplotlib.pyplot as plt
    import pandas as pd
    import numpy as np
    
    tips = pd.read_csv('E:/file/tips.csv')
    
    g = sns.FacetGrid(tips,col="day",row="time")
    g.map(sns.regplot,"total_bill","tip")
    #设置标题为行
    #g.set_titles(template="{row_var}/{row_name}")
    #设置标题为列
    g.set_titles(template="{col_var}/{col_name}标题")
    
    plt.show()
    

    测试记录:

    image.png

    八. 设置坐标轴

    1. g.set_axis_labels(x_var,y_var):一次性设置 x 和 y 的坐标的标题
    2. g.set_xlabels(label):设置 x 轴的标题
    3. g.set_ylabels(label):设置 y 轴的标题
    4. g.set(xticks,yticks):设置 x 和 y 轴的刻度
    5. g.set_xticklables(labels):设置 x 轴的刻度文字
    6. g.set_yticklabels(labels):设置 y 轴的刻度文字

    代码:

    import seaborn as sns
    import matplotlib.pyplot as plt
    import pandas as pd
    import numpy as np
    
    tips = pd.read_csv('E:/file/tips.csv')
    
    g = sns.FacetGrid(tips,col="day",row="time")
    g.map(sns.scatterplot,"total_bill","tip")
    #一次性设置 x 和 y 的坐标的标题
    g.set_axis_labels('消费金额','小费')
    g.set(facecolor='y')
    #设置 x 轴的刻度和刻度文字
    g.set(xticks=range(0,50,5),xticklabels=["$%d"%x for x in range(0,50,5)])
    
    plt.show()
    

    测试记录:

    image.png

    九. g.set 方法

    g.set 方法可以对 FacetGrid 下的每个子图 Axes 设置属性。其中可以设置的参数完全是根据 Axes 的属性来的。比如可以设置每个 Axes 的 facecolor 等。详情可查询 matplotlib.Axes官方文档

    g.set(facecolor='y')
    #设置 x 轴的刻度和刻度文字
    g.set(xticks=range(0,50,5),xticklabels=["$%d"%x for x in range(0,50,5)])
    

    十. g.fig 方法

    通过 g.fig 可以获取到当前的 Figure 对象,然后通过 Figure 对象再可以设置其他属性,比如 dip 等。

    g = sns.FacetGrid(tips,col="day",row="time")
    g.map(sns.scatterplot,"total_bill","tip")
    #设置分辨率
    g.fig.set_dpi(100)
    

    参考:

    1. https://study.163.com/course/introduction.htm?courseId=1003590004#/courseDetail?tab=1
    2. https://blog.csdn.net/zkx990121/article/details/122077587

    相关文章

      网友评论

          本文标题:Python数据分析与机器学习11-Seaborn之FacetG

          本文链接:https://www.haomeiwen.com/subject/erbsbrtx.html