超初心者向けPython入門講座

仕事の効率化などにpythonを使いたい!けど何から始めらばよいか分からない、といった初心者の方向けに、pythonの導入から実用的な使い方まで、極力分かりやすくまとめたサイトです。

matplotlib python

2次元平面分布図における範囲外の凡例や色合いの設定(Python)

投稿日:2020-06-08 更新日:

今回は、Pythonで平面分布図を作成する際の色合いや、凡例の設定、また凡例の範囲外の色の設定について解説したいと思います。

解説内容

 

1.平面分布図の色合いの設定

平面分布図には、色合いを設定するカラーマップというものが存在します。ここでは、そのカラーマップの種類と、その使い方について解説します。

  • 色合い(カラーマップ)の種類
  • カラーマップの使い方
  •  

    1.色合い(カラーマップ)の種類

    まずここでは、2次元の平面分布図を作る際に、その色合いを設定する方法について解説します。

    matplotlibには、cmap(Colormaps)というカラーマップが用意されています。カラーマップとは、色合いのセットをあらかじめ用意したものです。

    色合いには下のようなものがあります。

    (個人的には、miscellaneousの「jet」がおすすめです。)

    (matplotlib公式サイト参照:https://matplotlib.org/tutorials/colors/colormaps.html)

     

    Sequencial (連続)

    小さい値から大きいへ、連続的に変化するような分布を作成するのに適したカラーマップです。

     

    Diverging (発散)

    中心の値から、正または負の方向にどれくらい離れているかを表すのに適したカラーマップです。

     

    Cyclic (周期)

    色が周期的に変化するため、周期的性質を持つデータの図化に適したカラーマップです。

     

    miscellaneous(雑多)

    いろいろな種類の色合いが存在するカラーマップです。個人的には、青色から赤色に変化する「jet」が、小さい値と大きい値が分かりやすく、使いやすいと思います。

     

    Qualitative (定性)

    ばらばらの色合いのカラーマップなので、円グラフのような関連性の無いデータの図化に適したカラーマップです。

     

    2.カラーマップの使い方

    では、上で説明したカラーマップを実際に使用してみましょう!

    今回は「jet」を使ってみようと思います。下のコードを実行してください。

    import numpy as np
    import matplotlib.pyplot as plt
    img = np.arange(100).reshape(10,10)
    x = np.array([2,3,5,7,8,9,10,11,14,15])
    y = np.array([1,3,6,7,9,10,12,15,16,18])
    xx, yy = np.meshgrid(x, y)
    plt.contourf(xx, yy, img, cmap="jet")
    plt.show()

    すると、下のような図ができたと思います。

     

    基本的な2次元分布の作り方は、「Pythonで2次元の平面分布図を作成しよう」で解説していますので、今回は省略します。

     

    カラーマップの指定方法は、contourfで図を書くときに「cmap=”カラーマップ名”」と書くことで指定できます!

    ちなみに、カラーマップは、_r」を付けることで色合いを反転させることができます。

    import numpy as np
    import matplotlib.pyplot as plt
    img = np.arange(100).reshape(10,10)
    x = np.array([2,3,5,7,8,9,10,11,14,15])
    y = np.array([1,3,6,7,9,10,12,15,16,18])
    xx, yy = np.meshgrid(x, y)
    plt.contourf(xx, yy, img, cmap="jet_r")
    plt.show()

    jet_r」とすることで、先ほど作った図と色合いの反転した図を作成できました。

    Point
    • カラーマップの指定方法は、contourfで図を書くときに「cmap=”カラーマップ名”」と書く
    • カラーマップは、「_r」を付けることで色合いを反転させることができる

     

     

    2.平面分布図の凡例の設定

    次に、平面分布図を作成した際の凡例の設定方法について解説します。

    まずは下のコードを実行してみてください。

    import numpy as np
    import matplotlib.pyplot as plt
    img = np.arange(100).reshape(10,10)
    x = np.array([2,3,5,7,8,9,10,11,14,15])
    y = np.array([1,3,6,7,9,10,12,15,16,18])
    xx, yy = np.meshgrid(x, y)
    cont = plt.contourf(xx, yy, img, cmap="jet")
    plt.colorbar(cont)
    plt.show()

    すると、下のように凡例を追加することができました。

     

    ポイントは、「plt.contourf()」を「cont」という変数(オブジェクト)に入れ「plt.colorbar(cont)」で凡例を描画するというところです。

     

    ちなみに、凡例の幅を変えたい場合は

    cont = plt.contourf(xx, yy, img, 20, cmap="jet")

    のように、plt.contourf(X, Y, Z, 分割数, cmap=”カラーマップ”)と、分割数を設定すると凡例の幅を変えることができます。

     

    実用的には、最大値、最小値、分割数を変数として設定し、下のように設定すると使いやすいです。

    import numpy as np
    import matplotlib.pyplot as plt
    cb_min, cb_max = 0, 100
    cb_div = 10
    interval_of_cf = np.linspace(cb_min, cb_max, cb_div+1)
    img = np.arange(100).reshape(10,10)
    x = np.array([2,3,5,7,8,9,10,11,14,15])
    y = np.array([1,3,6,7,9,10,12,15,16,18])
    xx, yy = np.meshgrid(x, y)
    cont = plt.contourf(xx, yy, img, interval_of_cf, cmap="jet")
    CB = plt.colorbar(cont)
    plt.show()

     

    ポイントは、下のコードで最初に変数として最大値、最小値、分割数を設定します(cb_min, cb_max,cb_div)。

    cb_min, cb_max = 0, 100
    cb_div = 10

     

    そして、そのあとの下のコードで凡例の配列を作成することで、自由に凡例を設定することができます。

    interval_of_cf = np.linspace(cb_min, cb_max, cb_div+1)

    上の「interval_of_cf」は、numpyのlinspaceを使い、最小値から最大値まで、分割数で等分割した「list」を作る、という処理を行っています。

     

    つまり、実は「分割数」の部分は「配列(list)」に置き換えることで、直接凡例の数字を与えることができるのです!

    Point
    • 「plt.contourf()」を「cont」という変数に入れ、「plt.colorbar(cont)」で凡例を描画する
    • 凡例の幅を変えたい場合は、plt.contourf(X, Y, Z, 分割数, cmap=”カラーマップ”)と、分割数を設定する
    • 「分割数」は、「list」に置き換えることで直接凡例を指定できる

     

     

    3.平面分布図における凡例範囲外の色の設定

    「2.平面分布図の凡例の設定」では、凡例の最大値と最小値、分割数を変数として設定することで、凡例の幅や範囲を自由に変える方法を解説しました。

     

    ただし、実はこのままでは、設定した凡例の範囲外は空白になってしまします。

    実際に見てみましょう。下のコードを実行してください。

    import numpy as np
    import matplotlib.pyplot as plt
    cb_min, cb_max = 20, 80
    cb_div = 10
    interval_of_cf = np.linspace(cb_min, cb_max, cb_div+1)
    img = np.arange(100).reshape(10,10)
    x = np.array([2,3,5,7,8,9,10,11,14,15])
    y = np.array([1,3,6,7,9,10,12,15,16,18])
    xx, yy = np.meshgrid(x, y)
    cont = plt.contourf(xx, yy, img, interval_of_cf, cmap="jet")
    CB = plt.colorbar(cont)
    plt.show()

    すると、上のように範囲外の部分が空白になってしましました。

    そこで「contourf」でグラフを書く際に、「extend=”both”」と追記することで、範囲外を一番端の色で埋めることができます。

      

    では、10行目を下のコードに置き換え、もう一度実行してください。

    cont = plt.contourf(xx, yy, img, interval_of_cf, cmap="jet", extend="both")

    すると、下のように、範囲外もしっかりと色を付けることができました!

    凡例の形が上下に尖った形になりましたね。

    これで、凡例の範囲外まで図化することができました。

    Point
    • 設定した凡例の範囲外は空白になってしまう
    • 「contourf」でグラフを書く際に、「extend=”both”」と追記することで、範囲外を一番端の色で埋めることができる

     

     

    4.まとめ

    今回は、平面分布図を作成する際の色合いや、凡例の設定、また凡例の範囲外の色の設定について解説しました。

    「matplotlib」での作図は、できることが多いため、逆にやりたいことを見つけるのに苦労したりします。

    このサイトで皆さんの疑問が少しでも解決出来たら幸いです。

     

    なお、このサイトでは初心者の方向けに「Python初心者入門講座」という講座を作成していますので、気になった方はそちらもご覧ください。

    スポンサーリンク




    スポンサーリンク




    -matplotlib, python
    -

    執筆者:


    comment

    メールアドレスが公開されることはありません。 * が付いている欄は必須項目です

    関連記事

    第9章 Pythonの入力(input)を使ってみよう

    この章では、入力文(input)を学んでいきましょう!入力文とは、プログラムを実行した後に、あとから好きな文字や数字をプログラムに反映させる方法です。 解説内容 inputの使い方 inputを使って …

    Pythonで桁数やゼロ埋めを行う方法(format)

    今回は、pythonで「format」を用いて、数字や文字の桁数をそろえたり、ゼロ埋めする方法について解説します。 解説内容 formatの基本的な使い方と桁数指定 ゼロ埋めの方法 文字列との組み合わ …

    Pythonでcsvファイルへの書き出し(list,numpy,pandas対応)

    今回は、「csvファイル」へのデータの書き出しについて解説していこうと思います。csvファイルとは何か?については、本サイトの「Pythonでcsvファイルを読み込んでみよう」で解説しているので、そち …

    Pythonでフォルダ内のファイル名を取得しよう(拡張子指定)

    今回は、特定のフォルダに入っているすべてのファイル名を取得したり、特定の拡張子のファイル名を取得する方法について解説します。 ファイル名を取得することで、フォルダ内のファイルを対象にループ処理などを行 …

    第12章 Pythonでcsvファイルを読み込んでみよう

    さて、前回は「テキストファイル」の読み込みについて解説しましたね。この章では、「csvファイル」の読み込みについて解説したいと思います。 解説内容 csvファイルって何? csvファイルを読み込んでみ …

    スポンサーリンク





    初めまして、サイトを運営しているキユと申します。

    このサイトでは、まったくの初心者がPythonを使って、単純作業や仕事を効率化できるようになるまでに必要なことをまとめています。