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()

1行目:
import
はライブラリの機能を追加します。標準でPythonに認識されるキーワードは36個です。import
によりスクリプト中で使える言葉が増えます。語彙の集まりを「名前空間」といいます。上のスクリプトでは,matplotlib.pyplot
を名前空間に追加しplt
として使うことを宣言しています。4行目:
plt
に含まれているsubplots()
でfigure
及びaxes
オブジェクトを取得してfig
とax
という変数に格納しています。オブジェクトは部品です。figure
オブジェクトは画の入れ物である図を指しています。axes
(axis
の複数形)は座標軸の集まり,すなわち描画する図の中身です。matplotlibでは,図の入れ物と図の中身をfigure
,axes
として分離していることを理解しておきましょう。5, 6行目: 気温と高さをそれぞれ
T
とh
に格納しています。数字を角括弧の中にカンマで並べてひとまとまりにしています。このデータ構造をリストといいます。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()

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行目: 格子を描いています。