J. Plasma Fusion Res. Vol.94, No.3 (2018)１
５０‐１６１

講座 今日からはじめる Python

３．Python による科学技術計算
3. Scientific Computing in Python

３．
２ matplotlib の使い方
3.2 How to Use matplotlib
吉沼幹郎
YOSHINUMA Mikirou
核融合科学研究所（原稿受付：２
０
１
８年１月２
３日）

Python を用いて，データをグラフに描画するときに利用される matplotlib というモジュールの使い方を説明します．このモジュールを利用することで，Python を用いた行われた計算の途中や結果の数値を確認することが簡単にできるようになります．また，論文掲載用の図として利用できる品質のさまざまなグラフを描画することができます．ここでは，簡単な２次元データの散布図から，凡例表示やエラーバーの表示方法，３次元データのヒートマップの表示について説明します．
Keywords:
Python, matplotlib, data visualization, graph, control plot３．
２．
１ はじめにを呼び出す方法（関数インターフェース）があります．前

Python を用いて，実験データの解析を行うとき，ある者の方法は，記述が増える代わりに，matplotlib のすべて

データのセットに対して，Python で記述されたなにかのの機能を使うことができます．Python で構築するアプリ

処理を適用して，結果を得るということを繰り返します．

ケーションソフトウェアに matplotlib を組み込んで使う場

そのよなとき，得られた結果をグラフとして描画したいと合に便利です．後者の方法は，記述が少なくなるため，思うことでしょう．数値をファイルに書き出し，グラフ描

Jupyter などのインタラクティブな環境で使うときに便利

画ソフトウェアで読み込み，描画するという手順を踏んでです．

もよいのですが，処理の途中経過などは，いちいちファイ

Python のモジュールを利用するためには，利用したい

ルに書き出すのを面倒に感じます．ここでは，そのようなモ ジ ュ ー ル を イ ン ポ ー ト す る 必 要 が あ り ま し た．

状況でも便利に利用できる，Python で取り 扱 っ ている

matplotlib というモジュールは，複数のモジュールファイ

データから直接グラフを描画できる matplotlib モジュール

ルで構成されており，どれをどのようにインポートしたらの使い方を紹介します．matplotlib は，Python でグラフをよいか分かりにくいかもしれません．グフラフ描画に利用

描画するときに利用される標準的なモジュールとなっておされるものが matplotlib.pyplot というモジュールです．しり，二次元の散布図からヒートマップなど様々なグラフをばしば，スクリプトの冒頭で‘import matplotlib.pyplot as

描画することができます．matplotlib のホームページのplt’と 記 述 さ れ イ ン ポ ー ト さ れ て い ま す．こ れ は，

ギャラリーでは，どのようなグラフが描画できるのか一覧

matplotlib.pyplotモジュールをpltという名前でインポート

できます．

することを意味します．このようにすると，matplotlib.

matplotlib は，グラフ描画に使われる要素（オブジェク

pyplotに含まれる関数，例えば，plot()やshow()などが，’plt.

ト），例えば軸や線やラベルといったものが詰まったもの

plot(...)’や’plt.show()’のように，モジュール名’plt.’をつけてで，それらを適切に設定，操作することで，グラフ全体を記述することで呼び出すことができます．matplotlib には，構成します．matplotlib で，それらのオブジェクトを操作

MATLAB と互換性のある関数名を使いたい人のためにするには，オブジェクトごとに持っている操作手続き（メmatplotlib.mlab モジュールも用意されています．

ソッ ド）を 直 接 呼 び 出 す 方 法（オ ブ ジ ェク ト イ ン タ ー

ここではインタラクティブな環境を利用することを考フェース）と，オブジェクトの操作手続きを代行する関数

え，pylab というモジュールをインポートして関数イン

National Institute for Fusion Science, Toki, GIFU 509-5292 Japanauthor’s e-mail: yoshinuma@nifs.ac.jp

１５０!2018 The Japan Society of Plasma
Science and Nuclear Fusion ResearchLecture Note

3.2 How to Use matplotlib

M. Yoshinuma

ターフェースを使うスタイルで説明していきます．そこ

ファイルを用意する必要はありません．ぜひ，リストにあで，スクリプトの冒頭には，‘from pylab import *’と記述しるスクリプトを入力，改変して，動きを確認していただきて い ま す．こ の よ う に pylab モ ジ ュ ー ル を import す る

たいと思います．

と，matplotlib.pyplot,matplotlib.mlab,numpy モジュールに３．
２．
２ はじめの一歩含まれる関数を，モジュール名無しに，関数名だけで使えるようになり，記述量が少なくなります．ただし，このよ

まず，インタラクティブな環境を起動して List １にある

うにモジュール名を省略すると，異なるモジュールにおいものを実行してみましょう．説明のため，余計な線や文字て同名の関数がある場合に上書きされてしまう問題が起こが入っていますが，図１に描画結果を示します．"a"というりますので注意が必要です．同名の関数や変数があるかど

名前の配列に−1 から 1 まで 0.1 刻みの数値を設定（２行目）

うかは，インタラクティブな環境でその名前を評価してみし，その内容をグラフにプロット（３行目）するものです．

るとわかりますので，疑わしいときは確認するとよいで

plot()関数に与えた a という配列の値が y 軸の値としてプ

しょう．ここでは，気軽にスクリプトを入力して試していロットされています．配列一つを plot()関数に与えると，x

ただくために，記述量が少なくなるスタイルをとりました

軸の値は配列のインデックス番号が使われます．このようが，関数などの出所を明確にするためにも，モジュール名に配列にどのような値がはいっているかを簡単にグラフにを省略しないスタイルをお勧めします．

して確認することができます．数値列を生成する arange()

matplotlib によるグラフ描画の説明には，プロットする

関数は numpy モジュールによって提供されていますが，データが必要です．プロットするデータはすべてスクリプ

pylab モジュールを１行目の記述で import したことで，モト内で手短に生成していますので，試すために，データ

ジュール名を省略して利用できるようになっています．

List 1：pylab のインポートと配列内容のプロット

図１

List 1 による描画結果と図（Figure）の構成要素．

図１を見ながら，グラフを描画するときのいくつかの重関数によって，グラフ枠（Axes）内にデータ点をプロット

要な構成要素について説明します．グラフが描画されていし，show()関 数 に よ っ て，グ ラ フ 枠 が 配 置 さ れ た 図る領域全体が Figure と呼ばれる要素です．本文では「図（Figure）を描画します．図（Figure）やグラフ枠（Axes）（Figure）」と 書 く こ と に し ます．matplotlib で は この 図は自動的に作成され，操作の対象となる図（Figure）やグ（Figure）にグラ フ を 描 画 し，そ れ を 表 示 さ せ ます．図ラフ枠（Axes）も自動的に決められます．関数を呼び出し（Figure）の中には，x 軸，y 軸で囲まれた四角の領域があた結果は，現在対象になっている図（Figure）やグラフ枠

ります．本文では，「グラフ枠（Axes）」と書くことにしま（Axes）に現れます．ですから，現在対象になっている図

す．グラフ枠（Axes）は x 軸，y 軸によって構成され，そ（Figure）やグラフ枠（Axes）というものを意識して操作の中にデータ点がプロットされます．グラフ枠（Axes）

するとよいでしょう．

は，図（Figure）の中に一つ以上配置することができます．
関数を呼ぶスタイルで matplotlib を利用する場合，plot()
１５１

Journal of Plasma and Fusion Research Vol.94, No.3 March 2018

３．
２．
３．
１ データ点をプロットしてみる

３．
２．
３ (x, y)データをプロットする
こ こ で は 単 純 な xy 散 布 図 の グ ラ フ 描 画 を 通 し て，

単純 な ガ ウ ス 分 布 関 数 を プ ロ ッ ト し て み ま し ょ う．
List ２を実行してみてください（図２）．

matplotlib の各種操作を説明していきます．

List 2：ガウス分布関数

図２

List 2 による描画結果．

２行目，３行目でプロットするデータの配列 を 作り，破線，点線，一点鎖線は，それぞれ‘-’，‘--’，‘:’，‘-.’で指定

xdata，ydata としています．それらを plot()関数の１番目のします．マーカーで点を打ち，さらに線で結びたいときは，引数，２番目の引数としてそれぞれ与えます．plot()関数にこれらを組み合わせます．例えば，丸でプロットして，点渡す３番目の引数で，プロットに用いるマーカーを指定し線で結びたいときは，‘o:’という文字の列を三番目の引数ます．アルファベット小文字の‘o’を渡すことで，塗りつぶに渡します．マーカーのサイズは，markersize（あるいはされた丸記号を指定しています．注意していただきたいのms）というキーワード引数を使って指定できます．キー

は，plot()関数の引数は，前の章で配列を一つ与えたときとワード引数とは，Python の関数で用いられる引数の種類は異なっています．このように，同じ関数でも，引数の与の一つで，順不同に渡せるばかりでなく，渡さなかった場

え方に応じて適切に振る舞いが変化するものもあります．

合にデフォルトの値が使われるため，指定しなくてもよい

３．
２．
３．
２ マーカーや線種の指定とオーバープロット

引数です．線の太さは，linewidth（lw）というキーワード引

plot()関数に渡す三番目の引数でマーカーを変更するこ数を使って指定できます．いくつかマーカーとマーカーのとができました．この指定に使われる文字は，インタラク

サイズ，線種を変えてプロットしてみます．plot()関数の呼

ティブな環境で‘help(plot)’を実行すると表示される説明でび出しを重ねるとデータをオーバープロットできます

読むことができます．丸●，三角▲，四角■，ダイヤ◆の（List 3，図３）．

記号は，それぞれ‘o’，‘^’，‘s’，‘D’で指定します．実線，
List 3：マークを変えてオーバープロット

１５２

Lecture Note

3.2 How to Use matplotlib

図３

M. Yoshinuma

List 3 による描画結果．

３．
２．
３．
３ 色の指定をお勧めします．RGB の１
６進数文字列とは，００（１０進数でplot()関数を繰り返し呼び出してオーバープロットする０）か ら FF（１０進 数 で２５５）の 大 き さ で 赤（Red），緑と色が自動的に変わっていきます．自分で色を指定したい（Green），青（Blue）の各色の強さを指定する方法です．先ときは，plot()関数を呼び出すときに color（あるいは c）と頭に‘#’をつけて，例えば赤なら‘#FF００００’となります．白

いうキーワード引数に色を示す値を渡します．色を示す値

は，RGB 各色が最大値ですので，‘#FFFFFF’となります．

には，色の名前，色を表す１文字，RGB（A）の１６進数文字

一方，黒は各色が最小値の‘＃００００００’となります．List 4

列，RGB（A）の値をもつ tuple などいろいろあります．ここにいろいろな方法で色を指定した例を示します．最後の例

で（A）と書きましたが，これは透明度を指定するアルファのように色を１文字で指定する場合，スタイル指定の文字

チャンネルの値も指定できるからです．色を表す１文字に列に含めてしまうこともできます．手早く色を変えてプは，‘b’，‘g’，‘r’，‘c’，‘m’，‘y’，‘k’，‘w’の８文 字 が あ

ロットしたいときは，こちらの指定が楽でしょう．マーり，そ れ ぞ れ 青（blue），緑（green），赤（red），水 色

カ ー 内 部 の 色，境 界 の 色 は そ れ ぞ れ markerfacecolor（cyan），赤紫（magenta），黄（yellow），黒（key），白（mfc），markeredgecolor（mec）というキーワード引数に（white）に対応します．色の名前は多くありますが，実際色を指定する値を渡すことで個別に設定できます．これをの色をイメージすることは難しいので，先の８文字以外の用いて，白抜きや中抜きのマーカーを利用することもでき色を使いたい場合は，RGB の１
６進数文字列で指定することます（List 4，図４）．

List 4：さまざまな色指定の方法

図４

List 4 による描画結果．

１５３

Journal of Plasma and Fusion Research Vol.94, No.3 March 2018

３．
２．
３．
４ 軸の設定は，目盛りを振る位置を数値の配列にして渡します．第二

リスト List 5 と図５に，軸の目盛りや範囲を設定する例

引数に，文字列のリストを渡すと，目盛りのラベルにそのを示します．matplotlib では，図（Figure）をディスプレイ

文字列が使われます．例では，目盛り位置は，arange()関数に表示する前，すなわち show()関数を呼ぶ前に設定を済まを用いて生成しています（６行目，７行目）．y 軸のラベルせておく必要があります．

は，目盛り位置（yticks̲positions）の数値を’%4.3f’（小数４行目の tick̲params()関数によって，軸に目盛りや目盛点以下３桁）でフォーマットした文字列のリストを第二引りのラベル描画をさせるかの設定ができます．right キー

数に渡しています．９，１０行目の xlim()，ylim()関数によっ

ワード引数，top キーワード引数に True を設定することて，それぞれ x 軸の範囲，y 軸の範囲を設定します．第一引で，x 軸，y 軸の対向側にも目盛りを振るようにしていま数に下限値，第二引数に上限値を指定します．軸の方向はす．directionキーワード引数に’in’を設定することで，目盛下限値，上限値の大小関係によって適切に変化します．各りをグラフ内側に向けて描画するようにしています．５行

関数のパラメータの詳細については，plot()関数のときと同目の grid()関数によって，目盛りにあわせて格子状の線を様に，インタラクティブ環境で help（関数名）を実行す

描画させます．６行目，８行目の xticks()関数，yticks()関数

ることで読むことができます．

によって，目盛りを振る場所を指定できます．第一引数にList 5：軸の範囲とラベルの設定

図５

List 5 による描画結果．

数式表記も利用できます．List 6 では，タイトルの文字列

３．
２．
３．
５ タイトルと凡例の表示
List 6 と図６に，グラフタイトル，軸のラベルや凡例のとして，r’Function...’のように文字‘r’をつけています．こ
表記ではしばしば‘!
’
この例では使用していませんが，表示を行う例を示します．４，５行目の xlabel()，ylabel()

文字（機種によっては‘¥’文字）を利用します．Python では
文字列の表記中の‘!
’文字は，特別な文字（例えば改行やタ関数によって，それぞれ x 軸のラベル，y 軸のラベルを設定します．ラベルとして書き出す文字列を第一引数に指定しされたデータと凡例に表示する文字を一致させるために，

ブ文字）を表記するために使われます．また，‘!
’文字を表記するためにも使われるため，文字列データの中に‘!
’文字

plot()関数を呼び出すときに，キーワード引数 label に凡例!
を入れたいときは‘!
’のように二回書く必要があります．文として 表 示 さ れ る文 字 列 を 設 定 し て い ます．８行目の

字 列 の 前 に‘r’文 字 を つ け る と 書 い た も の を そ の ま まlegend()関数で凡例を表示させる指示を行いますが，凡例

Python の文字列データとすることができます．ですからとして使用される文字列が指定された後，すなわち plot()

このような記述をしておくと，を行った後に行います．９行目で title()関数によってタイ

すくなります．文字の大きさは，xlabel()，ylabel()，title()，形式のlegend()関数の fontsize キーワード引数に数値を設定する

ます．６，７行目でデータをプロットしています．プロット

トルの文字列を設定しています．文字列には，

１５４表記の文字列を書きやLecture Note

3.2 How to Use matplotlib

M. Yoshinuma

ことで，変更することができます．legend()関数には，表示

numpoints＝1 を指定して，凡例におけるマーカーの数を設定のためのキーワード引数が多く存在します．例では１つに設定しています．

List 6：凡例を表示

図６

List 6 による描画結果

３．
２．
３．
６ y２軸の利用

ロットです．１
１行目で twinx()関数を呼び出しています．

異なる値を同じ x 軸上にプロットしたい場合，x 軸を共twinx()関数を用いると，x軸を共有した 新しいy軸 （＝y2

通にして，y 軸をもうひとつ増やしたいことがあります．

軸）をもったグラフ枠（Axes）ができ，操作対象が新しく

もう一つの縦軸をy2軸とここでは呼ぶことにします．グラ

できたグラフ枠（Axes）に変化しま す．y2 軸 は twinx()を

フ枠の左側の枠線が y 軸に用いられ，y2 軸は y 軸の反対側行った後で作られますので，その範囲設定，ラベル設定，（右側）の枠線に描かれます．

y2 軸上へのプロット，レジェンドの描画は，その後で行いList 7 および図７に y2 軸を利用する例を示します．５行

ます．

目から９行目までは，これまで行ってきた x-y 軸へのプ
List 7：y２軸を使う

１５５

Journal of Plasma and Fusion Research Vol.94, No.3 March 2018

図７

List 7 による描画結果．

３．
２．
３．
７ 一つの図に複数のグラフを描く

成します．３行２列，合計６枚のグラフ枠（Axes）を並べしばしば，複数のグラフを用いて異なる物理量を同時にたい場合，subplot()関数の第１引数に行数の３を，第２引載せることもあります．グラフを一つ一つ作成しておい数に列数の２を与え，第３引数に，どの位置のグラフ枠て，あ と で 合 わ せ る こ と も で き ま す が，こ こ で は（Axes）を作成するかをインデックス番号で指定します．

matplotlib で一つの図に複数のグラフを描く方法を説明しインデックス番号は図８のように，まず行方向に変化しまます．

す．４番の位置にプロットしたいなら，subplot(3, 2, 4)とす

複数のグラフを作る場合，それぞれにグラフ枠（Axes）

ると，その位置に描画されるグラフ枠（Axes）が作成さを作成する必要があります．これまで行った twinx()関数もれ，それが操作対象になります．また，行数，列数，イン

新たにグラフ枠（Axes）を作成する効果がありました．こデックスが１０より小さい場合，それらを一つの引数にまとこでは subplot()関数を用いて新たにグラフ枠（Axes）を作

めて subplot（３２４）のように指定することもできます．

図８

subplot()関数によるレイアウトとインデックス番号．

List 8 および図９に１行２列のレイアウトでプロットす

まかに変えることができます．h̲pad，w̲pad というキーる例を示します．５行目で左側のグラフ枠（Axes）を作成

ワード引数にフォントサイズを基準にした値を設定しましています．６行目で枠の上と右側にも目盛りを振るようす．たとえば，横方向の間隔を２文字分ほど広げたいならに，tick̲params()関数で設定しています．１
１行目で右側のw̲pad＝2.0 とします．位置の調整には，subplots̲adjust()

グラフ枠（Axes）を作成しています．こちらの枠は，左側関数も使うことができます．subplots̲adjust（wspace＝の目盛りの数値を表示させな い よ う に，１
２行 目 の tick̲

0.0，hspace＝0.0）とするとグラフ同士が密着します．ここparams()関数で labelleft=False を設定しています．１
５行目

でキーワード引数 wspace,hspace には，それぞれグラフのの tight̲layout()関 数で グ ラ フ 枠 の 間 隔 を 調 整 し て い ま

x 軸の幅，y 軸の幅を基準とした値を渡します．

す．この tight̲layout()関数を使うと，各グラフの間隔を大１５６

Lecture Note

3.2 How to Use matplotlib

M. Yoshinuma

List 8：subplot()関数を用いた１行２列のレイアウト

図９

List８の描画結果．

３．
２．
３．
８ 図（Figure）の大きさの変更と保存 Change size

設定しています．６行目の savefig()関数によって，画像of figure and save to file

ファイルとして保存しています．第一引数に出力ファイル

これまで自動的に作成されるデフォルト設定の図名を指定します．拡張子によって自動的に画像形式が変換（Figure）
を 利 用 し て き ま し た が，figure()関 数 を 用 い る

されます．拡張子は，‘.png’，‘.svg’，‘.eps’というところと，大きさを指定して図（Figure）
を作成することができまがよく使われるものでしょう．保存と表示を行いたい場合

す．この関数を使うと，操作対象が新たに生成された図は，savefig()関数を使ってから show()関数を使ってくださ（Figure）に切り替わります．List 9 には，８インチ×６イ

い．例では，カレントディレクトリ（現在の作業ディレク

ンチの画像を 100 dpi で png（Portable Network Graphics）

トリ）に‘output̲gauss.png’という名前で画像ファイルが形式で 保 存 し，ま た表示 す る 例 を 示 し ま す．４行 目 の作成されますので，同名のファイルがないことを確認して

figure()関数の figsize キーワード引数にサイズを表す（８，６）

から実行してください．

のタプルを設定しています．dpi キーワード引数に，１００をList 9：図の保存

３．
２．
４．
１ 誤差棒のついたグラフ Plot with error bars

３．
２．
４ いろいろなプロット

誤差棒のついたグラフを描画するには errorbar()関数をここまで，matplotlib で単純な散布図を描画して，軸の使います．第１引数，第２引数にそれぞれ x，y のデータを範囲を設定したり，ラベルを付けたりしてきました．次に，渡すのは，plot()関数と同じです．errorbar()関数には誤差

誤差棒のついたプロットやヒートマップをプロットする方の値を渡すキーワード変数 xerr と yerr があります．x 軸方法を紹介します．

向の誤差は xerr に，y 軸方向の誤差は yerr に渡します．また，マーカーの指定には，キーワード変数 fmt を用います．
１５７

Journal of Plasma and Fusion Research Vol.94, No.3 March 2018

誤差棒の描き方を指定するためにキーワード変数 capsize,

で誤差棒両端の線の長さを，capthick で誤差棒両端の線のcapthick,elinewidth があります．工字型の誤差棒を表示し太さを，elinewidth で誤差棒の太さを指定できます．List

たい場合は，capsize を適切に指定してください．capsize

10 に例を示します．

List 10：誤差棒のついたグラフ

図１
０ List 10 の描画結果．

３．
２．
４．
２ 等高線のプロット

Contour plot

できます．

ここから３次元のデータ（二次元の配列に大きさが入っ

等高線にラベルをつけるには，プロットした等高線オブたもの）のプロットをしていきます．３次元プロットのたジェクトを clabel()関数に渡す必要があります．contour()めのデータを二次元配列で与えるときに混乱しやすいの関数は，等高線をプロットした後，等高線オブジェクトを

は，x 軸，y 軸方向と２次元配列の行方向，列方向の関係で返してきますので，それを cntr 変数に保持して（６行目），

す．向きが分かりやすいように，x 軸方向に非対称，y 軸方

clabel()関数に渡しています（７行目）．ラベルの書式の設向に対称な !
$!
%$$$%$という関数の値を z と
$
%#
&'#
#
"'
!#

定は clabel()関数のキーワード引数 fmtに，Pythonの書式指してプロットしてみます．

定文字列（C言語と似ています）を渡すことで行います．例

等高線は，contour()関数を用いて描きます．等高線の間では，小数点以下２桁の表示を指定しています．

を塗りつぶす contourf()関数もありますが，おおよその使

contour()関数には，他にも設定があります．colors キー

い方は contour()関数と同じです．contour()関数には２次元ワード引数に色の指示値を与えると，その色が順番に使わの配列を一つ渡すと，x 軸，y 軸はそれぞれは列方向，行方れますが，一つだけ渡すと単色で線を引くことができま

向のインデックス番号が使われます．２次元配列のデータ

す．詳しくは，matplotlib ホームページのギャラリーを見を確認するときには便利かと思います．よく行うのは，x，て調べるとよいでしょう．

y，z の３次元データを与えて，等高線を描かせることでしょう．
式（１），（２）で示される $,%のリストに対して，&の二次元配列をどのような並びで作成するかを式（３）に示し

$"%
$
$
$
'!
#&
!!
"!

（１）

%"%
%
%
%
'!
"&
!!
"!

（２）

&"%
!
$
!
!
$
!
%
%
%
#
#
!!
!$
"!
!$

ます．配列 $
，配列 %の要素数がそれぞれ &の列数，&の行

!
$
!
!
$
!
%
%
%
#
#
!!
"$
"!
"$
'

数に一致する必要があります．すなわち行方向が y 軸の方向，列方向が x 軸の方向に な り ま す．contour()関 数の x

!
$
!
!
$
!
!
$
%
%
%
%
#
#
'!
#
&
&
"$
"$
#!
"$
!!
"!

"，%
" のような２次元と y には，式（４），（５）に示す $

（３）

$
""%
$
!
$
$
%
'!
#&
!!
"!

配列を渡しても問題ありません．
データを作成する箇所が重要な場所です．(，)のリストか

$
!
$
$
%
'!
#&
!!
"!
'

"，%
" のようなリストを作成する関数が meshgrid()
ら$

$
$
$
%
&
'!
#&
!!
"!

List１１にプロットした例を示します．contour に与えるです．levels キーワード引数には，線を引くレベルを指定
１５８

（４）

Lecture Note

3.2 How to Use matplotlib

M. Yoshinuma

(

%
##&
%
!
%
%
&
(!
!!
!!
!'
%
!
%
%
&
(!
"!
"!
"'

%
%
%
&
'
(!
#!
#!
#'

（５）

List 11：等高線のグラフ

図１
１ List 11 の描画結果．

３．
２．
４．
３ ヒートマップのプロット

Heat map

プを描画しました（図１３左，List 13）．同時に等高線図も(x, y, z)の値の分布を色の変化で示したい場合にヒート

描画し，$
$
!
%%
!
!
!%付近を拡大しています．この図のよ#$マップが用いられます．ヒートマップのプロットには，うに，色と等高線がずれて見えます．これは，メッシュ内

pcolormesh()関数を使います．例を List１２および描画結果の色が，そのメッシュの左下の値に応じた色で塗られていを図１２に示します．ほぼ，前節のcontour()関数の代わりに，るためです．メッシュの値と塗りの中心をあわせたい場合

pcolormesh()関数を使うだけです．キーワード引数 cmapには，塗りに使われるメッシュを計算に使われたメッシュに，カラーマップ（値と色を対応させるもの）を指定しま

サイズの半分だけシフトさせる必要があります．List 13

す．カラーマ ッ プ の名 前 は，よ く 使 わ れ る も の で‘jet’，の６行目，７行目でずらしたメッシュ位置を作成し，２０行‘hot’,‘rainbow’などがあります．色と値の対応を示すため

目の pcolormesh()関数に渡しています．注意していただきに，同時にカラーバーを描画することが一般的です．カ

た い の は，こ の pcolormesh()に 渡 し て い る shifted̲x とラーバーは，colorbar()関数に，対象となるヒートマップを

shifted̲y は，pcolormesh()でヒートマップの表示をずらし

渡 す こ と で 描 画 できます．対 象 となるヒートマップは，て適切にするために渡しているだけで，ここで渡している

pcolormesh()関数で描画したときに得られます．７行目で，zm の値は，あくまでも xm，ym の位置で計算したものでpcolormesh()で得られたヒートマップを hmap に保存してあることです．（ずらした後の位置（shifted̲x，shifted̲y）

おき，８行目で colorbar()関数に渡しています．colorbar()で計算したものではありません．）

関数からは，描画したカラーバーが得られます．９行目で６行目，７行目のずらした位置を得るところについて少は，８行目で得られたカラーバー cbar からカラーバー自身

し説明します．’r̲’は，numpy モジュールが提供するオブのグラフ枠（Axes）を取り出して，y 軸のラベルを設定すジェクトで，r̲[a, b, c]とするとオブジェクトの機能（メる機能を呼び出してカラーバーにラベルを設定しています．

ソッド）によって，a，b，c，を行方向へ連結した配列を返

このプロットでは気が付かないかもしれませんが，描画してくれます．式を見ると，x(y)の２番目の要素から最後範囲を狭めてメッシュが拡大されると，色の塗り方に問題まで，間隔の半分を差し引いてずらしています．その先頭が 現 れ ま す．わ か り や す い よ う に，関 数 をと 最 後 に，x(y)の 先 頭 の 要 素 x[0](y[0])と 最 後 の 要 素!$$#"%#%

"
$
!
%%
$
#!

をzとしてpcolormesh()関数でヒートマッ

x[-1](y[-1])を連結させ付け加えています．

１５９

Journal of Plasma and Fusion Research Vol.94, No.3 March 2018

List 12：ヒートマップによる表示

List 13：メッシュをずらす

図１
２ List 12 の描画結果．

図１
３ List 13 の描画結果．

３．
２．
４．
４ 色付き散布図のプロット Scatter plot with color

渡します（図１４）．マーカーに渡す値については，plot()関depend on values

数を参考にしてください．例では，‘o’を渡して，丸を用いz の値に応じて，色を変化させた散布図を描きたいことています．マーカーの大きさは，キーワード引数 s に pointもあります．その場合は，scatter()関数を使います．例をの二乗の単位で指定します．すなわち，１０point のマーカー

List１４に示します．プロットする位置の座標 x，y をそれぞ

なら１００を s に渡します．範囲やカラーマップについて

れ第１引数，第２引数に渡します．キーワード引数 c に zは，pcolormesh()関数と同じです．

を渡します．キーワード引数 marker にマーカーの種類を

１６０

Lecture Note

3.2 How to Use matplotlib

M. Yoshinuma

List 14：色付きの散布図による表示

図１
４ List 14 の描画結果．

３．
２．
５ 最後に

す．公式のページ以外にも，インターネットでアクセスで

matplotlib の関数インターフェースを用いて，よく利用きる情報も豊富にありますので，検索してみると，解決策され る グ ラ フ を描 画 で き る よ う に 紹 介 し て き ま し た．

が見つかることでしょう．

matplotlib は，オブジェクトの集合として構成されている

さて，matplotlib を使ってみた感想はいかがでしょうか．

ため，関数インターフェースを使っていても，オブジェク

望みのグラフを得るためには，いちいち設定しないといけ

トを関数に渡したり，オブジェクトの機能を呼び出したりないと，面倒に感じたでしょうか．そのような場合にこそ，と，どうしてもオブジェクトを介した記述が出てきてしま

いろいろな設定の手間なく，最低限のデータさえ与えればいました．オ ブ ジ ェ ク ト に つ い ては，Python と そ のモ

望むようなプロットができる自分用の plot 関数を Python

ジュールを利用していくと自然とわかってくるかと思いまで書くときです．ぜひ，Python と matplotlib を活用してくす．また，matplotlib の公式ページには，多くのプロット例

ださい．

があり，それを描画したスクリプトを見ることができま

１６１