Python でデータを可視化する、グラフを描くライブラリと言えば、Matplotlib です。
今回は Matplotlib を使用してグラフの描く時の基本的な部分をまとめました。
インストール
Matplotlib は外部ライブラリなので、pip等でインストールが必要です。
pip install matplotlib
適宜、インストールしてください。
Google Colaboratory はデフォルトで Matplotlib がインストールされています。
Google Colaboratory
本記事に掲載しているコードは Google Colaboratory で動作を確認しています。
下記からアクセスして、ご自身のGoogleドライブにコピーしていただければ、すぐに実行できます。
環境構築の不要な Google が提供している Webサービスなので、Python を学習中の方にはオススメです。
基本形
まずは、基本の形を覚えることをおすすめします。
Matplotlib はいろいろな書き方ができるのですが、私はいつも次の形にしています。
ほとんどの場合、pyplotモジュールのみで事足りるので、pyplotモジュールをimportします。
import matplotlib.pyplot as plt
グラフにしたいデータを定義します。
data_x = [1, 2, 3, 4, 5]
data_y = [1, 2, 3, 4, 5]
Figureインスタンスはグラフを描くキャンバスのようなイメージです。
fig = plt.figure()
Axesオブジェクトは描くグラフのことを指しています。
キャンバスにグラフの枠を描くようなイメージです。
ax = fig.add_subplot()
Axesオブジェクトにグラフの種類とデータを設定します。
plot()
は線グラフになります。
ax.plot(data_x, data_y)
最後にグラフを表示します。
fig.show()
以上がグラフを表示するまでの基本の形です。
まとめると次のようになります。
# pyplotモジュールをimport
import matplotlib.pyplot as plt
# データを定義
data_x = [1, 2, 3, 4, 5]
data_y = [1, 2, 3, 4, 5]
# Figureインスタンスを作成
fig = plt.figure()
# FigureインスタンスにAxesオブジェクトを追加
ax = fig.add_subplot()
# Axesオブジェクトにグラフの種類とデータを設定
ax.plot(data_x, data_y)
# グラフを表示する
fig.show()

今回はこの基本形をベースに進めていきます。
Figureインスタンスの設定
Figureインスタンスを作成する際に、引数を指定することでキャンバスの大きさ、色などを指定できます。
項目 | 説明 | デフォルト値 |
---|---|---|
figsize | キャンバスのサイズを指定 (width, height)の形式 単位はインチ | (6.4, 4.8) |
dpi | 解像度を指定 1インチあたりドット数で指定 | 100.0 |
facecolor | 背景色 | ‘white’ |
edgecolor | 枠線の色 | ‘white’ |
linewidth | 枠線の太さ | 0 |
tight_layout | ラベルや凡例などの配置を自動調整する機能のオン・オフを指定 Trueでオン | False |
tight_layout
の効果は分かりづらいので後に回し、それ以外を設定してみます。
こんな感じ。
import matplotlib.pyplot as plt
data_x1 = [5, 4, 3, 2, 1]
data_y1 = [1, 2, 3, 4, 5]
fig1 = plt.figure(
figsize=(7.7, 7.7),
dpi=50,
facecolor='orange',
edgecolor='black',
linewidth=5
)
ax1 = fig1.add_subplot()
ax1.plot(data_x1, data_y1)
fig1.show()

facecolor
は分かりやすいですね。
figsize
も縦横比を同じにしたので、反映されていることが分かります。
dpi
はデフォルト値の半分にしたので、少し画像が荒くなっているのが分かるでしょうか。
より鮮明にしたい場合はこのdpi
に大きな値を指定します。
edgecolor
とlinewidth
も反映されていることが分かりやすいですね。
複数のデータをグラフにする
次は、複数のデータをグラフにしてみます。
これは簡単で、ax.plot()
を追加するだけです。
こんな感じ。
# pyplotモジュールをimport
import matplotlib.pyplot as plt
# データを定義
data_x2 = [1, 2, 3, 4, 5]
data_y2_1 = [1, 2, 3, 4, 5]
data_y2_2 = [5, 4, 3, 2, 1]
# Figureインスタンスを作成
fig2 = plt.figure(
dpi=120,
facecolor='orange',
edgecolor='black',
linewidth=5
)
# FigureインスタンスにAxesオブジェクトを追加
ax2 = fig2.add_subplot()
# Axesオブジェクトにグラフの種類とデータを設定
ax2.plot(data_x2, data_y2_1)
ax2.plot(data_x2, data_y2_2)
# グラフを表示
fig2.show()

線の色は指定しなくても、自動で別の色にしてくれます。
凡例を表示する
複数の(系統の)データを表示させることができました。
ただ、このままだと、どの線がどのデータなのかが分かりません。
そこで、次は、凡例を表示させます。
凡例はFigureインスタンスとAxesオブジェクトに設定できますが、今回はAxesオブジェクトのほうに設定します。
凡例はlegend()
メソッドを使用します。
legend()
メソッドの主な引数は次の5つです。
項目 | 説明 | デフォルト値 |
---|---|---|
bbox_to_anchor | 凡例を表示する位置をタプル形式で指定します。 (0, 0)がグラフの左下、(1, 1)がグラフの右上になります。 | (0, 1) ※左上 |
loc | bbox_to_anchorで指定した位置に凡例の枠のどこを合わせるか を指定します。 | ‘upper left’ |
borderaxespad | bbox_to_anchorで指定した位置と、locで指定した場所との距離を指定します。 | 0.5 |
facecolor | 凡例の背景色 | ‘white’ |
fontsize | 凡例のフォントサイズ | 10 |
legend()
メソッドの引数loc
に設定できる値は次のものがあります。
Location String | Location Code |
---|---|
‘best’ | 0 |
‘upper right’ | 1 |
‘upper left’ | 2 |
‘lower left’ | 3 |
‘lower right’ | 4 |
‘right’ | 5 |
‘center left’ | 6 |
‘center right’ | 7 |
‘lower center’ | 8 |
‘upper center’ | 9 |
‘center’ | 10 |
legend()
の引数loc
に設定できる値0〜10でも設定できますが、キーワードで指定したほうが後から見て分かりやすいのでオススメです。
実際に設定してみると、こんな感じ。
# pyplotモジュールをimport
import matplotlib.pyplot as plt
# データを定義
data_x3 = [1, 2, 3, 4, 5]
data_y3_1 = [1, 2, 3, 4, 5]
data_y3_2 = [5, 4, 3, 2, 1]
# Figureインスタンスを作成
fig3 = plt.figure(
dpi=120,
facecolor='orange',
edgecolor='black',
linewidth=5
)
# FigureインスタンスにAxesオブジェクトを追加
ax3 = fig3.add_subplot()
# Axesオブジェクトにグラフの種類とデータを設定
ax3.plot(data_x3, data_y3_1, label='graph1')
ax3.plot(data_x3, data_y3_2, label='graph2')
# Axesオブジェクトに凡例を追加
ax3.legend(
bbox_to_anchor=(1, 1),
loc='upper left',
borderaxespad=0.5,
facecolor='lime',
fontsize=10
)
# グラフを表示
fig3.show()

表示位置の設定は分かりづらいかもしれませんが、値を変えていろいろ試すと理解しやすいです。
複数のグラフを描く
次は複数のグラフを描いてみます。
複数のグラフを描く方法は簡単で、Axesオブジェクトを追加するだけです。
Axesオブジェクトはadd_subplot()
メソッドで追加しましたが、今までは引数を指定していませんでした。
add_subplot()
の引数には、グラフを表示する位置を、3桁の整数で指定します。
この3桁の整数は各桁ごとに意味があり、例えば 221 を指定した場合は2行2列に分割した1番目の位置 にグラフが表示されます。

add_subplot(221)
の位置335 を指定した場合は3行3列に分割した5番目の位置 にグラフが表示されます。

add_subplot(335)
の位置2つのグラフを縦に並べる
では、実際に2つのグラフを縦に並べて表示してみます。
こんな感じ。
# pyplotモジュールをimport
import matplotlib.pyplot as plt
# データを定義
data_x4 = [1, 2, 3, 4, 5]
data_y4_1 = [1, 2, 3, 4, 5]
data_y4_2 = [5, 4, 3, 2, 1]
# Figureインスタンスを作成
fig4 = plt.figure(
dpi=120,
facecolor='orange',
edgecolor='black',
linewidth=5
)
# FigureインスタンスにAxesオブジェクトを追加
ax4_1 = fig4.add_subplot(211)
ax4_2 = fig4.add_subplot(212)
# Axesオブジェクトにグラフの種類とデータを設定
ax4_1.plot(data_x4, data_y4_1, label='graph1')
ax4_2.plot(data_x4, data_y4_2, label='graph2')
# Axesオブジェクトに凡例を追加
ax4_1.legend(
bbox_to_anchor=(1, 1),
loc='upper left',
borderaxespad=0.5,
facecolor='lime',
fontsize=10
)
ax4_2.legend(
bbox_to_anchor=(1, 1),
loc='upper left',
borderaxespad=0.5,
facecolor='yellow',
fontsize=10
)
# グラフを表示
fig4.show()

2つのグラフを縦に並べる → 2行1列 なので、add_subplot(211)
とadd_subplot(212)
になっています。
2つのグラフを横に並べる
次は、2つのグラフを横に並べます。
こんな感じ。
# pyplotモジュールをimport
import matplotlib.pyplot as plt
# データを定義
data_x5 = [1, 2, 3, 4, 5]
data_y5_1 = [1, 2, 3, 4, 5]
data_y5_2 = [5, 4, 3, 2, 1]
# Figureインスタンスを作成
fig5 = plt.figure(
dpi=120,
facecolor='orange',
edgecolor='black',
linewidth=5
)
# FigureインスタンスにAxesオブジェクトを追加
ax5_1 = fig5.add_subplot(121)
ax5_2 = fig5.add_subplot(122)
# Axesオブジェクトにグラフの種類とデータを設定
ax5_1.plot(data_x5, data_y5_1, label='graph1')
ax5_2.plot(data_x5, data_y5_2, label='graph2')
# Axesオブジェクトに凡例を追加
ax5_1.legend(
bbox_to_anchor=(1, 1),
loc='upper left',
borderaxespad=0.5,
facecolor='lime',
fontsize=10
)
ax5_2.legend(
bbox_to_anchor=(1, 1),
loc='upper left',
borderaxespad=0.5,
facecolor='yellow',
fontsize=10
)
# グラフを表示
fig5.show()

ん???
凡例とグラフが重なってますね。。。
こんな時に役に立つのが、Figure インスタンスを作成する時に指定できるtight_layout
です。
tight_layout
をTrue に設定してみます。
こんな感じ。
# pyplotモジュールをimport
import matplotlib.pyplot as plt
# データを定義
data_x6 = [1, 2, 3, 4, 5]
data_y6_1 = [1, 2, 3, 4, 5]
data_y6_2 = [5, 4, 3, 2, 1]
# Figureインスタンスを作成
fig6 = plt.figure(
dpi=120,
facecolor='orange',
edgecolor='black',
linewidth=5,
tight_layout=True
)
# FigureインスタンスにAxesオブジェクトを追加
ax6_1 = fig6.add_subplot(121)
ax6_2 = fig6.add_subplot(122)
# Axesオブジェクトにグラフの種類とデータを設定
ax6_1.plot(data_x6, data_y6_1, label='graph1')
ax6_2.plot(data_x6, data_y6_2, label='graph2')
# Axesオブジェクトに凡例を追加
ax6_1.legend(
bbox_to_anchor=(1, 1),
loc='upper left',
borderaxespad=0.5,
facecolor='lime',
fontsize=10
)
ax6_2.legend(
bbox_to_anchor=(1, 1),
loc='upper left',
borderaxespad=0.5,
facecolor='yellow',
fontsize=10
)
fig6.show()

キレイに表示されましたね。
グラフの表示が崩れてしまった時はtight_layout
を True にしてみましょう。
冒頭でリンクを共有したGoogle Colaboratory では、3行3列でグラフを9個並べたコードも掲載しているので、そちらも参考にしてみてください。
おわりに
今回は、
Python でデータを可視化する、グラフを描くためのライブラリである Matplotlib の基本的な使い方
をご紹介しました。
基本的な使い方を紹介するために今回は 線グラフ を用いました。
線グラフの細かい設定であったり、棒グラフ、散布図など他のグラフも Matplotlib で描けるので、そちらも近いうちに紹介していきたいと思っています。
以上です。
コメント