• matplotlib绘制子图


    在python数据分析中,我们会经常用到matplotlib模块绘制多个子图,如何个性化子图的布局,下面利用Kaggle中的Titanic数据介绍两种方法。

    import pandas as pd
    import numpy as np
    
    df_train = pd.read_csv("train.csv")
    df_train.head()
    

    1. subplot2grid()

    subplot2grid(shape, loc, rowspan=1, colspan=1, fig=None, **kwargs)

    import matplotlib.pyplot as plt
    
    fig = plt.figure(figsize=(12, 8))
    
    # 获救情况
    plt.subplot2grid((2,3), (0,0))
    df_train['Survived'].value_counts().plot(kind='bar')
    plt.title("Survived(1:Yes 0:No)")
    plt.ylabel("count")
    plt.xticks(rotation = 0)
    
    # 仓位等级
    plt.subplot2grid((2,3), (0,1))
    df_train['Pclass'].value_counts().plot.bar()
    plt.title("PClass")
    plt.ylabel("count")
    plt.xticks(rotation = 0)
    
    # 年龄
    plt.subplot2grid((2,3), (0,2))
    plt.scatter(df_train.Survived, df_train.Age)
    plt.title("Survived and Age")
    plt.xticks(rotation = 0)
    
    # 仓位等级对应年龄密度曲线
    plt.subplot2grid((2,3), (1,0), colspan=2)
    df_train.Age[df_train.Pclass == 1].plot.kde()   
    df_train.Age[df_train.Pclass == 2].plot.kde()
    df_train.Age[df_train.Pclass == 3].plot.kde()
    plt.xlabel("Age")
    plt.ylabel("Density") 
    plt.title("Distribution by Age")
    plt.legend(('Pclass=1', 'Pclass=2','Pclass=3'), loc='best') # sets our legend for our graph.
    
    # 登陆港口
    plt.subplot2grid((2,3), (1,2))
    df_train.Embarked.value_counts().plot.bar()
    plt.title("Embarked")
    plt.xlabel("Embarked")
    plt.ylabel("count")  
    plt.xticks(rotation = 0)
    
    plt.tight_layout()
    

    2. gridspec

    GridSpec(nrows, ncols, figure=None, left=None, bottom=None, right=None, top=None, wspace=None, hspace=None, width_ratios=None, height_ratios=None)

    下面代码将会得到和上面同样的图形。

    import matplotlib.pyplot as plt
    import matplotlib.gridspec as gridspec
    
    fig = plt.figure(figsize=(12, 8))
    spec = gridspec.GridSpec(ncols=3, nrows=2)
    
    # 获救情况
    ax1 = fig.add_subplot(spec[0, 0])
    df_train['Survived'].value_counts().plot(kind='bar')
    plt.title("Survived(1:Yes 0:No)")
    plt.ylabel("count")
    plt.xticks(rotation = 0)
    
    # 仓位等级
    ax2 = fig.add_subplot(spec[0, 1])
    plt.subplot2grid((2,3), (0,1))
    df_train['Pclass'].value_counts().plot.bar()
    plt.title("PClass")
    plt.ylabel("count")
    plt.xticks(rotation = 0)
    
    # 年龄
    ax3 = fig.add_subplot(spec[0, 2])
    plt.scatter(df_train.Survived, df_train.Age)
    plt.title("Survived and Age")
    plt.xticks(rotation = 0)
    
    # 仓位等级对应年龄密度曲线
    ax4 = fig.add_subplot(spec[1, 0:2])
    df_train.Age[df_train.Pclass == 1].plot.kde()   
    df_train.Age[df_train.Pclass == 2].plot.kde()
    df_train.Age[df_train.Pclass == 3].plot.kde()
    plt.xlabel("Age")
    plt.ylabel("Density") 
    plt.title("Distribution by Age")
    plt.legend(('Pclass=1', 'Pclass=2','Pclass=3'), loc='best')
    
    # 登陆港口
    ax5 = fig.add_subplot(spec[1, 2])
    df_train.Embarked.value_counts().plot.bar()
    plt.title("Embarked")
    plt.xlabel("Embarked")
    plt.ylabel("count")  
    plt.xticks(rotation = 0)
    
    fig.tight_layout()
    

    参考资料

    1. https://blog.csdn.net/han_xiaoyang/article/details/49797143
    2. https://matplotlib.org/tutorials/intermediate/gridspec.html
  • 相关阅读:
    从头搭建Openstack运行环境(七)--实现负载均衡与外网访问
    ML2分层端口绑定技术在SDN开发中的应用(一)
    从头搭建Openstack运行环境(六)--租户网络间路由与防火墙
    翻译校对1
    pykube-pod.obj的json字符串解析
    第一版k8s
    the server does not allow access to the requested resource
    have fun of Docker
    Clean Development Series
    Understanding the GitHub Flow官方的是最好的,永远要看第一手资料
  • 原文地址:https://www.cnblogs.com/shaocf/p/9017012.html
Copyright © 2020-2023  润新知