python Matplotlibデータの可視化(2):3つの容器のオブジェクトと一般的な設定を詳しく説明する。


前のブログでは,matplotlibのすべての描画要素は、基本型とコンテナ型の2つに分類されます。容器の形の元素は3種類があります。figure、axes、axis。一度の図面の必要な流れは、まずfigureのインスタンスを作成し、次にfigureによって1つ以上のaxesを作成し、その後axesのインスタンスによって様々な方法を呼び出して様々な基本的な要素を追加し、最後にaxesのインスタンス自体の様々な方法またはaxesによってaxisのインスタンスを取得することによって、様々な要素の詳細な操作を実現することである。
このブログでは、前のセクションに続き、3つの大きな容器の要素を作成するという、いわゆる3つの容器を通して作成される常用設定を紹介します。
1 figure
1.1 figureを作成する
上記で述べたfigurはFigure類の実用化対象を指していますが、もちろんFigure類は直接的に実装されません。このように作成されたFigurインスタンスオブジェクトはシーケンスに共同管理されません。matplotlibでは様々な方法でfigureを作成していますが、その中でもpylotモジュールに属するfigur()方法が一番よく使われていて、一番便利です。この方法を説明します。
figure方法のパラメータは以下の通りです。
  • num:整体または文字列タイプ、オプションパラメータ、デフォルトはNoneです。このパラメータ課はfigureのアイデンティティ、すなわちIDとして理解できます。Noneの値は、既に増加した上で、figureのインスタンスを作成します。このパラメータがNoneでない場合、既存のnum値と重複すると、figurがアクティブ状態になり、figurの参照を返す。入力されたパラメータが文字列である場合、この文字列はfigurのタイトルに設定されます。
  • figsize:tupleタイプ、オプションパラメータ、デフォルトはNoneです。figsizeパラメータによりfigreのsize、すなわち(width,height)単位はinchとして設定できます。Noneの値はデフォルトのsizeを使用します。
  • dpi:整型、オプションパラメータは、ピクチャピクセルを設定するために使用されます。
  • face色:前景色を設定するオプションのパラメータで、デフォルトは白です。
  • edgeカラー:外枠の色を設定するオプションのパラメータで、デフォルトは黒です。
  • frame eon:bookタイプ、オプションパラメータは、ウィンドウを描画するかどうかを示す枠で、デフォルトは。
  • FigreClass:カスタムクラスのインスタンスを使用するときに使用されるクラス名を入力し、デフォルトはmaplotlib.figur.Figureです。
  • clear:bookタイプ、オプションパラメータ、デフォルトはFalseです。もし値がTrueであれば、figurが既に存在しているなら、そのfigurの内容は全てクリアされます。
  • 
    from matplotlib import pyplot as plt
    import matplotlib as mpl
    import numpy as np
    mpl.rcParams['font.sans-serif'] = ['SimHei'] #       
    
    fig = plt.figure(figsize=(4,2), facecolor='grey') #   figure
    fig.add_axes((0,0,1,1)) #     axes     
    plt.show()

    jupyterエディタでは、空白のfigureは表示されませんので、少なくともfigurにaxesを追加してください。
    1.2 figurの常用設定
    1.2.1 set方法共通設定
    figureを作成する際の各パラメータは基本的にfigureのインスタンスオブジェクトに対応するset方法で変更できます。例えばset_faceカラーは前景色をセットしてセットします。size_inches()はサイズなどを設定するために使われます。
    設定前の景色:
    
    fig = plt.figure(figsize=(4,2))
    fig.set_facecolor('grey') #      
    plt.plot()
    plt.show()
    
    fig = plt.figure()
    fig.set_size_inches(2,3) #     
    plt.plot()
    plt.show()

    1.2.2 figurタイトルの設定
    
    fig = plt.figure(figsize=(4,2))
    fig.suptitle("figure title", color='red') #   figure  
    plt.plot()
    plt.show()

    1.2.3テキストの追加
    
    fig = plt.figure(figsize=(4,2))
    fig.text(0.5,0.5,"figure text",color='red') #   figure  ,                       
    plt.plot()
    plt.show()

    1.2.4設定凡例
    
    fig = plt.figure(figsize=(5,3))
    axes = fig.add_axes((0,0,0.8,1))
    x = np.linspace(0, 10, 1000)
    line1, = axes.plot(x, np.sin(x)) #   ,line1      ,  plot()          
    line2, = axes.plot(x, np.cos(x))
    fig.legend([line1, line2],['sin', 'cos'])
    plt.show()

    1.2.5サブ図の間隔を設定する
    
    fig, axes = plt.subplots(2,2,facecolor='grey')
    fig.subplots_adjust(left=None, #        figure           
      bottom=None, 
      right=None, 
      top=None,
      wspace=0.3, #          
      hspace=1) #          
    plt.show()

    2 axes
    axesはfigureという絵の上の子図と考えられます。子図は一般的に座標図ですから、軸域や座標系としてもっと理解したいです。
    2.1 axesの作成
    一つのfigureは複数のaxesを有してもよく、pylotモジュールであれfigurのインスタンスであれ、複数のaxesを作成する方法が定義されています。1)plt.axes()
    plt.axes()は、pylotモジュールのaxes()を指し、この方法は現在アクティブなfigurにaxesを作成し、作成されたaxesをアクティブにします。最初の位置パラメータが空になったら、この方法はfigur全体を占めるaxesを作成します。通常、我々は一つのtupleパラメータ(left,botton,width,height)を最初の位置パラメータとして導入することができます。tupleの4つの要素はそれぞれfigurの左枠との距離を表します。枠の幅はfigureの幅に比例し、幅の比率、高さはfigureの高さに比例します。このようにaxesを追加すると、axesが自動的に作成され、与えられた位置とsizeに従ってfigurに追加されます。最後にaxesの参照を返します。
    
    fig1 = plt.figure(figsize=(4,2), facecolor='grey')
    ax1 = plt.axes((0.1, 0.1, 0.8, 0.7), facecolor='green')
    fig2 = plt.figure(figsize=(4,2), facecolor='yellow')
    ax2 = plt.axes((0.1, 0.1, 0.8, 0.8), facecolor='red') #   axes        
    plt.show()

    注意してください。同じエリアにaxesを追加すると、後で追加したaxesが前に追加したaxesを上書きします。
    
    fig = plt.figure(figsize=(4,2), facecolor='grey')
    ax1 = plt.axes((0.1, 0.1, 0.8, 0.8), facecolor='green')
    ax2 = plt.axes((0.1, 0.1, 0.8, 0.7), facecolor='red') #   axes        
    plt.show()

    (2)figur.add_axes()
    figur.add_axes()メソッドの役割はaxesをfigureに追加することであり、この方法は作成済みのaxesを最初のパラメータとして導入することができます。add(u)axesは入ってきたaxesをfigureに追加しますが、これはあまり使われていません。多くの場合、我々は、plt.axes()の方法のように、一つのtupleパラメータ(left,botton,width,height)を最初の位置パラメータとして伝達する。同様に、同じエリアにaxesを追加すると、後で追加したaxesが前に追加したaxesを上書きします。
    
    fig = plt.figure(figsize=(4,2), facecolor='grey')
    fig.add_axes((0.1, 0.1, 0.3, 0.7), facecolor='green') #   axes        
    fig.add_axes((0.5, 0.1, 0.3, 0.7), facecolor='red')
    plt.show()

    (3)plt.subplotとplt.subplots()
    plt.subplotとplt.subplots()はpylotモジュールで定義されている2つの方法で、いずれもfigurを複数の行の複数の列のグリッドに分割してaxesを追加しますが、機能と使い方は少し違います。
  • plt.subplot()
  • plt.subplotは主に3つのパラメータ(nrows,ncols,index)を含み、それぞれ行数、列数、索引を表しています。この方法は指定された行列数に基づいてfigurをグリッドに区分し、指定された索引のグリッド内でaxesを作成し、axesの参照に戻ります。インデックスは、1から左へ、上から下へ、例えばplt.subplot(2,2,4)はfigurを2行の2つの列の4つのグリッドに分割し、4番目のサブグリッドの中でaxesを作成して返します。注意してください。plt.subplot()を呼び出すたびにインデックスを指定するサブグリッド内でaxesを作成します。すべてのサブグリッド内でaxesを作成するのではなく、複数のサブグリッド内でaxesを作成する必要がある場合は、複数のplt.subplot()を呼び出す必要があります。また、nrows、ncols、indexの3つのパラメータが10より小さい場合、これらの3つのパラメータを1つの3ビットの整数に統合して書くことができ、例えば、plt.subplot(2,2,4)とplt.subplot(224)は完全に等価である。
    
    fig = plt.figure(figsize=(4,4), facecolor='grey')
    ax1 = plt.subplot(221,facecolor='green')
    ax2 = plt.subplot(224,facecolor='red')
    plt.show()
  • plt.subplots()
  • plt.subplot()とは違って、plt.subplots()はfigurを再作成し、作成したfigurを指定された列数でグリッドに分割し、各サブグリッドにaxesを作成し、最後にfigureとすべてのサブグリッドにaxesグループのnumpy配列に戻ります。
    
    fig, axes = plt.subplots(2,2,facecolor='grey')
    fig.suptitle('figure title')
    print(type(axes))
    axes[0,0].set_facecolor('green')
    axes[1,1].set_facecolor('red')
    plt.show()

    plt.subplots()は、x軸またはy軸を共有するかどうかを設定するためのパラメータsharexのペアを持っています。このパラメータは、book型または'none'、'all'、'row'、'col'の4つの文字列のうちの1つに、それぞれ以下の意味があります。
  • Falseとnone'は共有しないことを表し、どのサブ図のx軸またはy軸も互いに独立している。
  • Trueおよび'all'は、すべてのサブ図がx軸またはy軸を共有することを示す。
  • 'row'は同じ行のサブ図でx軸またはy軸を共有する。
  • 'col'は同じ列のサブ図でx軸またはy軸を共有する。
  • 
    fig, axes = plt.subplots(2,2,sharex=True,sharey=True,facecolor='grey')
    fig.suptitle('figure title')
    axes[0,0].set_facecolor('green')
    axes[1,1].set_facecolor('red')
    plt.show()

    (4)figur.add_subplot()とfigre.subplots()
    figur.add_subplotと上記で紹介したplt.subplot()は機能も使い方もほぼ同じで、唯一の違いはplt.subplot()の目標は現在アクティブなfigurであり、figur.add_subplot()は呼出add_です。subplot()メソッドのfigur。
    
    fig = plt.figure(figsize=(4,4), facecolor='grey')
    ax1 = fig.add_subplot(221,facecolor='green')
    ax2 = fig.add_subplot(224,facecolor='red')
    plt.show()

    figur.subplots()の機能、使い方はまた上記で紹介したplt.subplots()と似ています。違いはfigur.subplots()がもう一つのfigureを作成しないで、現在のfigurをメッシュを分割して各メッシュの中でaxesを作成します。
    
    fig = plt.figure(facecolor='grey')
    axes = fig.subplots(2,2)
    axes[0, 0].set_facecolor('green')
    axes[1, 1].set_facecolor('red')
    plt.show()

    2.2 axesの共通設定
    axesはmatplotlib作図の多くの要素の核心であり、ほとんどの設定はaxesによって達成できると言えます。
    2.2.1設定タイトル
    
    fig = plt.figure(facecolor='grey')
    fig.suptitle("figure   ", color='red')
    ax1 = fig.add_subplot(121)
    ax2 = fig.add_subplot(122)
    ax1.set_title('   1') #     
    ax2.set_title('   2')
    plt.show()

    2.2.2設定凡例
    
    fig = plt.figure(figsize=(5,3))
    axes = fig.add_axes((0,0,0.8,1))
    x = np.linspace(0, 10, 1000)
    line1, = axes.plot(x, np.sin(x))
    line2, = axes.plot(x, np.cos(x))
    axes.legend([line1, line2],['  ', '  '])
    plt.show()

    2.2.3座標軸名称の設定
    
    fig = plt.figure(figsize=(4,1))
    axes = fig.add_axes((0,0,1,1))
    axes.set_xlabel('x ', fontsize=15)
    axes.set_ylabel('y ', fontsize=15, color='red')
    plt.show()

    2.2.4座標軸範囲の設定
    
    fig = plt.figure(figsize=(6,2))
    axes = fig.add_axes((0,0,0.8,1))
    x = np.linspace(-3, 5, 1000)
    line1, = axes.plot(x, np.sin(x))
    axes.set_xlim((-3,5)) #        
    axes.set_ylim((-3,3)) #        
    plt.show()

    2.2.5外枠を隠す
    
    fig = plt.figure(figsize=(6,2))
    axes = fig.add_axes((0,0,0.8,1))
    x = np.linspace(-10, 10, 1000)
    line1, = axes.plot(x, np.sin(x))
    axes.set_xlim((-10,10)) #        
    axes.set_ylim((-2,2)) #        
    axes.spines['right'].set_color('none') #       
    axes.spines['top'].set_color('none') #       
    plt.show()

    2.2.6グリッドを表示する
    
    fig = plt.figure(figsize=(6,2))
    axes = fig.add_axes((0,0,0.8,1))
    x = np.linspace(-10, 10, 1000)
    line1, = axes.plot(x, np.sin(x))
    axes.set_xlim((-10,10)) #        
    axes.set_ylim((-2,2)) #        
    axes.grid(True)
    plt.show()

    2.2.7コメントを追加する
    
    fig = plt.figure(figsize=(6,2))
    axes = fig.add_axes((0,0,0.8,1))
    x = np.linspace(-10, 10, 1000)
    line1, = axes.plot(x, np.sin(x))
    axes.set_xlim((-10,10)) #        
    axes.set_ylim((-2,2)) #        
    axes.grid(True)
    axes.annotate('  ', xy=(0, 0), # xy       
      xytext=(2.5, -1.5), # xytext       
      arrowprops=dict(facecolor='red'))
    plt.show()

    3 axis
    axisはmatplotlibにおいて、軸ラベル、目盛線、目盛ラベル、グリッド線の描画を担当しています。ほとんどの場合、axisは手動で作成して、axesを作成する時に一緒にaxisを作成します。axesのインスタンスオブジェクトを通じてaxes内のaxisのインスタンスを呼び出すことができます。axisの例を通して、より多様な、微妙なアイコン操作を実現できます。
    axesの例でget_を呼び出すことができます。xaxis()方法はaxisの例を取得し、labelなどのオブジェクトに対する動作を実現する。
    3.1 axis常用設定
    3.1.1座標軸名称を設定する
    
    fig = plt.figure(figsize=(4,2), facecolor='grey')
    axes = fig.add_axes((0, 0,1,1))
    
    # x 
    axes.get_xaxis().get_label().set_text('x axis')
    axes.get_xaxis().get_label().set_color('red')
    axes.get_xaxis().get_label().set_fontsize(16)
    # y 
    axes.yaxis.get_label().set_text('y axis')
    axes.yaxis.get_label().set_color('blue')
    axes.yaxis.get_label().set_fontsize(16)
    plt.show()

    3.1.2座標軸目盛ラベルスタイルの設定
    
    fig = plt.figure(figsize=(4,2), facecolor='grey')
    axes = fig.add_axes((0, 0,1,1))
    
    #   x     
    for tl in axes.get_xaxis().get_ticklabels():
     tl.set_color('red')
     tl.set_rotation(45)
     tl.set_fontsize(16)
    
    plt.show()

    3.1.3座標軸目盛位置を設定する
    
    import matplotlib.ticker as ticker
    
    # Fixing random state for reproducibility
    np.random.seed(19680801)
    
    fig, ax = plt.subplots()
    ax.plot(100*np.random.rand(20))
    
    formatter = ticker.FormatStrFormatter('$%1.2f')
    ax.yaxis.set_major_formatter(formatter)
    
    for tick in ax.yaxis.get_major_ticks():
     tick.label1.set_visible(False)
     tick.label2.set_visible(True)
     tick.label2.set_color('green')
    
    plt.show()

    3.1.4座標軸位置の設定
    
    fig = plt.figure(figsize=(6,2))
    axes = fig.add_axes((0,0,0.8,1))
    x = np.linspace(-10, 10, 1000)
    line1, = axes.plot(x, np.sin(x))
    axes.set_xlim((-10,10)) #        
    axes.set_ylim((-2,2)) #        
    axes.spines['right'].set_color('none') #       
    axes.spines['top'].set_color('none') #       
    axes.xaxis.set_ticks_position('bottom') #       
    axes.yaxis.set_ticks_position('left') #       
    axes.spines['bottom'].set_position(('data', 0)) #       ,data         
    axes.spines['left'].set_position(('data', 0))
    plt.show()

    4まとめ
    この文章は主にmatplotlibグラフの3つのコンテナ要素を紹介します。figur、axes、axis。figureは一番下の容器です。キャンバスに相当して、複数のaxesを描くことができます。axesはfigurの上のサブ図です。各axesは独立したグラフです。各axesは複数のaxisを含んでいます。axisを通じて、グラフの詳細に関する操作を実現できます。
    matplotlibグラフの3つの階層のレイアウトを理解すると、我々はfigure->axes-->axisの流れを通じてグラフをマクロレベルで作成することができます。今後のブログでは、グラフの詳細設定や、さまざまな統計グラフの描き方を紹介していきます。
    参照
    公式文書:https://matplotlib.org/tutorials/intermediate/artists.html#sphx-glr-tutoris-interrmedit-arts-py
    以上がpython Matplotlibのデータ可視化です。(2):3つの容器のオブジェクトと通常の設定の詳細を詳しく説明してください。Matplotlibのデータ可視化について(2):3つの容器のオブジェクトと通常の設定の資料は他の関連記事に注目してください。