matplotlib入門#

早速,Pythonで簡単な図を描いてみましょう。

標準大気#

地球の平均的な気温の鉛直分布は標準大気として定義されています。

import matplotlib.pyplot as plt


fig, ax = plt.subplots()
T = [15.0, -56.5, -56.5, -44.5, -2.5, -2.5, -58.5, -86.2]
h = [0., 11, 20., 32., 47, 51., 71, 84.852]
ax.plot(T, h)
plt.show()
_images/7c955af32d433a244c6da5715c8a01013636afa3eb4d58387d5a767e51812c9c.png
  • 1行目: importはライブラリの機能を追加します。標準でPythonに認識されるキーワードは36個です。importによりスクリプト中で使える言葉が増えます。語彙の集まりを「名前空間」といいます。上のスクリプトでは,matplotlib.pyplotを名前空間に追加しpltとして使うことを宣言しています。

  • 4行目: pltに含まれているsubplots()figure及びaxesオブジェクトを取得してfigaxという変数に格納しています。オブジェクトは部品です。figureオブジェクトは画の入れ物である図を指しています。axesaxisの複数形)は座標軸の集まり,すなわち描画する図の中身です。matplotlibでは,図の入れ物と図の中身をfigure, axesとして分離していることを理解しておきましょう。

  • 5, 6行目: 気温と高さをそれぞれThに格納しています。数字を角括弧の中にカンマで並べてひとまとまりにしています。このデータ構造をリストといいます。

  • 7行目: 二つのリストをそれぞれx, yの値としてax.plot()に渡して描画します。plot()は入れ物であるfigureではなく図の中身axesに含まれています。

  • 8行目: 図を画面表示します。

図の保存#

自分のパソコン上でJupyter notebooksを動かしている場合は,

fig.savefig("standard.png")

とすれば描画した図を保存できます。この例ではPNG形式ですが,そのほかの形式でも保存できます。拡張子をpdfにすれば,拡大してもきれいなPDF形式になります。Google Colaboratoryで描画した図を保存するもっとも簡単な方法は,図をドラッグ&ドロップすることです。ダウンロードするには

from google.colab import files

fig.savefig("standard.pdf")
files.download("standard.pdf")

とします。ノートブックは仮想マシン上で動いているためです。

グラフの見栄え#

グラフにタイトルや軸ラベルをつけたり,目盛を振りなおしたりして,見やすくしてみましょう。

import matplotlib.pyplot as plt


fig, ax = plt.subplots(figsize=(5, 7))

T = [15.0, -56.5, -56.5, -44.5, -2.5, -2.5, -58.5, -86.2]
h = [0., 11, 20., 32., 47, 51., 71, 84.852]
ax.plot(T, h, linewidth=3, color="black")

ax.set_title("Standard Atmosphere", fontsize=24)
ax.set_xlabel("Temperature K", fontsize=18)
xticks = range(-90, 20, 15)
ax.set_xticks(xticks)
ax.set_xticklabels(xticks, fontsize=14)
ax.set_xticks(range(-80, 20, 5), minor=True)
ax.set_ylabel("Height km", fontsize=18)
ax.set_yticks(h)
ax.set_yticklabels(h, fontsize=14)
ax.set_yticks(range(0, 90, 5), minor=True)
ax.set_ylim(h[0], h[-1])
ax.grid()
plt.show()
_images/abcd3b04b4cf02b1bc0e722532b0308b2d9ab4398c09eb5979a136c98c9a2362.png

4行目: グラフのサイズを指定して,縦長にします。単位はインチです。

8行目: 白黒印刷を想定して,線の色を黒にしました。線の太さを3ptに太くしました。lw=3, c="k"と省略形で書くこともできます。

ax.set_title("Standard Atmosphere", fontsize=24)
ax.set_xlabel("Temperature K", fontsize=18)

10, 11行目: タイトルをつけフォントサイズを24ポイントにしました。同様に,x軸にラベルをつけ,フォントサイズを18ptにしました。

12~14行目: range()を使って-90から5刻みのリストを作りxticksに格納しています。20は含まれないので,15までになります。set_xticks()で目盛を振ります。set_xticklabels()で目盛につけるラベル(文字)を指定します。ここでは座標値をラベルにも使っていますが,異なるラベルをつけることもできます。

15行目: 副目盛を5刻みで振ります。minor=Trueは副目盛を指定していること示します。

16~20行目: 同様にy軸のラベルや目盛,目盛ラベルを指定します。主目盛はhの値,副目盛は5 km刻みにしました。set_ylim()でy軸の範囲を指定しています。h[0]は最初の要素0,h[-1]は最後の要素84.852を表しています。

21行目: 格子を描いています。