Matplotlib図面チュートリアル(2 Dステップ)

26934 ワード

一、実験紹介
1.1実験内容
MatplotlibはPython言語をサポートするオープンソースグラフィックスライブラリであり、豊富なグラフィックスタイプ、簡単なグラフィックス方式、完全なインタフェースドキュメントをサポートしているため、Pythonエンジニア、科学研究学者、データエンジニアなど様々な人に愛されている.これはMatplotlibグラフィックコースの第2章で、パラメータを使用してより複雑な2 D画像を描く方法を学びます.
1.2実験知識点
  • Matplotlib 2 D画像を描画
  • 1.3実験環境
  • python2.7
  • Xfce端末
  • ipython端末
  • 1.4人々に適合する
    このコースの難易度は一般的で、Pythonベースを持ち、Matplotlibグラフィックスを使用することに興味のあるユーザーに適しています.
    二、二次元図面の進級
    前の章では、線形図、円グラフ、散点図など、Matplotlibを使用して一般的な画像を描く方法について説明しました.しかし、Matplotlibのデフォルトのスタイルは確かに美しくありません.そこで、この章では、描画方法のパラメータをどのように設定して、よりきれいで自分の望む図形を描くかを説明します.
    2.1線型図のスタイル
    線形図はmatplotlib.pyplot.plot(*args, **kwargs)法で描かれていることが分かった.ここで、argsはデータ入力を表し、kwargsの部分はスタイルパラメータを設定するために使用される.
    2 D線グラフに含まれるパラメータは40を超える(文書P 1390).その中でよく使われるものも10余りあり、代表的なパラメータをいくつか選んで以下のように列挙します.
    パラメータ
    意味alpha=
    線種の透明度を0.0~1.0に設定color=
    線種の色を設定fillstyle=
    線種の塗りつぶしスタイルの設定linestyle=
    線種のスタイルの設定linewidth=
    線種の幅の設定marker=
    タグポイントのスタイルを設定するには
    ……
    ……
    上記のいくつかの項目について.
    ラインカラーcolor =のプリセット値(文書P 1527)は、次のとおりです.color =パラメータ値

    b

    g

    r

    w
    ホワイト
    m
    マゼンタ
    y
    黄色
    k

    ……
    ……
    実は、ほとんどが色に対応する英語の名前の頭文字です.もちろん、color = '#008000'で任意の色を設定することもできます.
    線型のスタイルlinestyle =に予め設定されたパラメータ値(文書P 1250)は、次のとおりです.linestyle =パラメータ値
    線種
    '-'
    既定の実線
    '--'
    破線
    '-.'
    かんせつせん
    ':'
    点線
    下図は4種類の一般的な線型のスタイルを示しています
    サンプルポイントマークスタイルmarker =に予め設定されたパラメータ値(文書P 1527)はさらに多くなります.marker =パラメータ値
    サンプルポイントマーク
    '.'
    ソリッドポイント
    ','
    ピクセルポイント
    'o'
    中空点
    'p'
    ごかくけい
    'x'
    x形
    '+'
    +シェイプ
    ……
    ……
    次の図は、すべてのタグに対応するパラメータ値とスタイルを示しています.
    次に、正弦波関数の画像をもう一度描き直します.いくつかのパラメータを追加して、そんなに単調ではないことを望んでいます.オンライン環境のMatplotlibバージョンが低いため、ローカル環境で実行されている最新バージョンで描かれているデフォルトの画像スタイルがよりきれいになります.
    # -*- coding: utf-8 -*
    
    from matplotlib import pyplot as plt  #    pyplot     
    import numpy as np  #         
    
    #   -2PI   2PI         1000   ,    X   
    X = np.linspace(-2 * np.pi, 2 * np.pi, 1000)
    #    sin()       
    y1 = np.sin(X)
    #    cos()       
    y2 = np.cos(X)
    
    #      `*args`    X,y   
    plt.plot(X, y1, color='r', linestyle='--', linewidth=2, alpha=0.8)
    plt.plot(X, y2, color='b', linestyle='-', linewidth=2)
    plt.show()
    

    2.2散点図のスタイル
    線形図のほか、散点図もよく使われる図形の一つです.たとえば,機械学習アルゴリズムを用いてクラスタリングを行う場合,試料データを散点図で示すことが多い.
    Matplotlibでは,matplotlib.pyplot.scatter()という散点図を描く方法が知られている.次に、どのパラメータが含まれているかを見てみましょう.
    パラメータ
    意味s=
    散点サイズc=
    散点カラーmarker=
    散点スタイルcmap=
    マルチカテゴリの分散点の色を定義するにはalpha=
    点の透明度(Point Transparency)edgecolors=
    散点エッジカラー
    ここで、散点の大きさは、数値の大きさを設定することによって制御されます.分散点の色は、パラメータ値と線形の色設定が似ている場合があります.散布点の色は複数であってもよく、1つのリストを使用して各点の色を個別に設定することができます.
    # -*- coding: utf-8 -*
    
    from matplotlib import pyplot as plt  #    pyplot     
    import numpy as np  #         
    
    x = np.random.rand(100) #     0   1      100    
    y = np.random.rand(100) #     0   1      100    
    colors = np.random.rand(100) #     0   1      100    
    size = np.random.normal(20, 30, 100) #     20   30      100    
    
    #      
    plt.scatter(x, y, s=size, c=colors)
    plt.show()
    

    2.3円グラフ様式
    円グラフはmatplotlib.pyplot.pie()で描かれています.色、ラベル、シャドウなど、さまざまなスタイルをさらに設定することもできます.次に例を示します.
    # -*- coding: utf-8 -*
    
    import matplotlib.pyplot as plt
    
    label = 'Cat', 'Dog', 'Cattle', 'Sheep', 'Horse' #      
    color = 'r', 'g', 'r', 'g', 'y' #      
    size = [1, 2, 3, 4, 5] #      
    explode = (0, 0, 0, 0, 0.2) #         
    
    #      
    plt.pie(size, colors=color, explode=explode, labels=label, shadow=True, autopct='%1.1f%%')
    
    #       
    plt.axis('equal')
    
    #    
    plt.show()
    

    2.4組合せ図
    3つの一般的な画像の描画を説明した.実際には、いくつかのタイプの同じ図を1枚の図に表示したり、組み合わせ図の描画をしたりすることがよくあります.
    実は簡単です.柱図や折れ線図など、必要な組み合わせ図のスタイルを一緒に置くだけでいいです.
    # -*- coding: utf-8 -*
    
    import matplotlib.pyplot as plt
    
    x = [1, 3, 5, 7, 9, 11, 13, 15, 17, 19]
    y_bar = [3, 4, 6, 8, 9, 10, 9, 11, 7, 8]
    y_line = [2, 3, 5, 7, 8, 9, 8, 10, 6, 7]
    
    plt.bar(x, y_bar)
    plt.plot(x, y_line, '-o', color='y')
    plt.show()
    

    2.5サブグラフの描画
    コンビネーション図の描画について説明しましたが、組み合わせて直接一緒に置くことができない図もあります.この場合、サブ図が必要です.サブ図とは、いくつかの独立した図を1つの大きな図に表示することです.比較が必要な場合、サブマップは非常に有効です.
    Matplotlibでは,サブマップを描画する方法はmatplotlib.pyplot.subplot()であり,この方法により各サブマップの表示順序を制御する.次のようになります.
    subplot(   ,    ,    )
    

    以下に、3つの一般的なサブマップの位置関係の概略図を列挙する.
    次に,4つのサブマップ(2行x 2列)からなる大きな図を描いた.
    import numpy as np
    import matplotlib.pyplot as plt
    
    #     
    x = np.linspace(-2*np.pi, 2*np.pi) 
    
    y1 = np.sin(x)
    y2 = np.cos(x)
    
    #    1
    plt.subplot(2, 2, 1)
    plt.plot(x, y1, 'k')
    #    2
    plt.subplot(2, 2, 2)
    plt.plot(x, y2, 'r')
    #    3
    plt.subplot(2, 2, 3)
    plt.plot(x, y2, 'y')
    #    4
    plt.subplot(2, 2, 4)
    plt.plot(x, y2, 'g')
    
    plt.show()
    

    このような平行または垂直に配列されたサブマップに加えて、matplotlib.pyplot.subplot()によってより複雑なスタイルを描くこともできます.例えば、大きな図セットの小さな図です.
    import numpy as np
    import matplotlib.pyplot as plt
    
    #     
    x = np.linspace(-2 * np.pi, 2 * np.pi)
    
    y1 = np.sin(x)
    y2 = np.cos(x)
    
    #   
    plt.axes([.1, .1, .8, .8])
    plt.plot(x, y1, 'k')
    #   
    plt.axes([.6, .6, .3, .3])
    plt.plot(x, y2, 'r')
    
    plt.show()
    

    2.6描画例
    一般的に、パターンを描くと、凡例を描く必要があります.Matplotlibでは、図例はmatplotlib.pyplot.legend()の方法で描画することができる.私たちはまた上の正弦と余弦曲線を例に挙げます.
    # -*- coding: utf-8 -*
    
    from matplotlib import pyplot as plt  #    pyplot     
    import numpy as np  #         
    
    #     
    X = np.linspace(-2 * np.pi, 2 * np.pi, 1000)
    y1 = np.sin(X)
    y2 = np.cos(X)
    
    #    label=     
    plt.plot(X, y1, color='r', linestyle='--', linewidth=2, label='sin   ')
    plt.plot(X, y2, color='b', linestyle='-', linewidth=2, label='cos   ')
    #     
    plt.legend(loc='upper left')
    plt.show()
    

    ここでは、label=を介して各カーブにラベルを追加する2つの場所を変更する必要があります.そして、plt.legend(loc='upper left')を1本増やせばいいです.ここで、loc='upper left'は、図例を示す位置であり、例えば、ここでは左上である.位置の変換は、downrightの組み合わせで実現することもできます.
    上に描かれた最終画像は次のようになります.
    もちろん、これは図例のスタイルの一つにすぎません.公式文書1237ページを参照して、他のスタイルの描画方法を表示できます.
    2.7画像表示
    複雑な画像を描くと、読書対象が画像の意味を全面的に理解するのは難しいことが多い.この場合、画像表示は画竜点睛の効果を果たすことが多い.画像表示とは、画面に文字注釈、指示矢印、フレームなどの各種表示要素を追加することである.
    Matplotlibでは,文字表記の方法はmatplotlib.pyplot.text()によって実現される.最も基本的なスタイルはmatplotlib.pyplot.text(x, y, s)であり、x,yは寸法位置の位置決めに用いられ、sは寸法の文字列を表す.このほか、fontsize=horizontalalignment=などのパラメータで寸法フォントのサイズ、位置合わせスタイルなどを調整することもできます.
    次に、柱図に文字を表示する例を示します.
    # -*- coding: utf-8 -*
    from matplotlib import pyplot as plt #       
    
    x_bar = [10, 20, 30, 40, 50] #      
    y_bar = [0.5, 0.6, 0.7, 0.4, 0.6] #      
    bars = plt.bar(x_bar, y_bar, color='blue', label=x_bar, width=2) #      
    for i, rect in enumerate(bars):
        x_text = rect.get_x() #         
        y_text = rect.get_height() + 0.01 #            0.01
        plt.text(x_text, y_text, '%.1f' % y_bar[i]) #     
    
    plt.show()
    

    文字表示に加えて、matplotlib.pyplot.annotate()の方法で画像に矢印などのスタイル表示を追加することもできます.次に、上記の例に矢印タグを追加するコードを1行追加します.
    # -*- coding: utf-8 -*
    from matplotlib import pyplot as plt #       
    
    x_bar = [10, 20, 30, 40, 50] #      
    y_bar = [0.5, 0.6, 0.7, 0.4, 0.6] #      
    bars = plt.bar(x_bar, y_bar, color='blue', label=x_bar, width=2) #      
    for i, rect in enumerate(bars):
        x_text = rect.get_x() #         
        y_text = rect.get_height() + 0.01 #            0.01
        plt.text(x_text, y_text, '%.1f' % y_bar[i]) #     
    
        #       
        plt.annotate('Max', xy=(32, 0.6), xytext=(38, 0.6), arrowprops=dict(facecolor='black', width=1, headwidth=7))
    
    plt.show()
    

    上記の例では、xy=()は表示終点座標、xytext=()は表示起点座標を示している.また、arrowprops=()は矢印パターンを設定し、facecolor=は色を設定し、width=は矢印の幅を設定し、headwidth=は矢印の幅を設定する.
    矢印の描画中に、矢印のスタイルを変更するためのarrowstyle=もあります.次の図は、一般的な矢印スタイルを示しています.
    さらに、connectionstyle=のパラメータは、矢印接続のスタイルを変更するために使用することができる.次の図は、一般的な矢印接続スタイルを示しています.
    2.8ダイナミックプロット
    ダイナミックマップは、プレゼンテーション環境の要件が高く、使用頻度が低いが、特定のシーンでは、動図が伝える情報量が静的ピクチャよりはるかに大きい図面の不可欠な一部である.
    例えば,数値計算では勾配降下法を用いることが多い.勾配降下の過程を言語と式で記述すると,非常に退屈になる.勾配降下過程を示す動図を描くことで,この方法に初めて接触してもすぐに理解できる.
    Matplotlibは早くからダイナミックマップをサポートしていますが、簡単な例でダイナミックマップの描画を示します.
    ダイナミックマップは主にanimationモジュールによって実現される.具体的にはmatplotlib.animation.FuncAnimation(fig, func)です.ここでfigは、描画された画像を表す.funcは、各フレームの値をリフレッシュする更新関数と見なすことができる.
    # -*- coding: utf-8 -*
    #     
    import numpy as np
    import matplotlib.pyplot as plt
    import matplotlib.animation as animation
    
    #               
    fig, ax = plt.subplots()
    
    x = np.arange(0, 2 * np.pi, 0.01)
    
    line, = plt.plot(x, np.sin(x))
    
    #     
    def update(i):
        line.set_ydata(np.sin(x + i / 10.0))
        return line,
    
    #     
    animation = animation.FuncAnimation(fig, update)
    
    #    
    plt.show()
    

    三、実験まとめ
    今回の実験では,2 D描画において,一般的な方法に含まれるパラメータを熟知し,より複雑なスタイルの画像を容易に描画した.もちろん、これらの内容は依然として初級であり、実際のニーズを完全に満たすことができない可能性があります.実際の描画過程では、Matplotlibで提供されている描画方法を組み合わせて、よりきれいな画像を描く必要があります.
    四、授業後の練習問題
    1.自分で手を出して、Matplotlibで下図を描いてみましょう.
    上図参照コード:
    $ wget http://labfile.oss.aliyuncs.com/courses/892/sin_cos_functions.py