本ページでは、python のグラフ作成パッケージ Matplotlib を用いて折れ線グラフ (line chart) を描く方法について紹介します。

# matplotlib.pyplot.plot の概要

matplotlib には、折れ線グラフを描画するメソッドとして、matplotlib.pyplot.plot が用意されてます。

# matplotlib.pyplot.plot の使い方

matplotlib.pyplot.plotメソッド は、内部的にmatplotlib.lines.Line2Dクラスを参照しているため、使い方は、matplotlib.lines.Line2Dクラスを参考にします。

matplotlib.lines.Line2D(xdata, ydata, linewidth=None, linestyle=None, color=None,
                        marker=None, markersize=None, markeredgewidth=None,
                        markeredgecolor=None, markerfacecolor=None,
                        markerfacecoloralt='none',fillstyle=None, antialiased=None,
                        dash_capstyle=None, solid_capstyle=None,
                        dash_joinstyle=None, solid_joinstyle=None, pickradius=5,
                        drawstyle=None, markevery=None, **kwargs)

# matplotlib.pyplot.Line2D クラスの主要な引数

xdata (必須) X 軸方向の数値
ydata (必須) Y 軸方向の数値
linewidth 線の太さ
linestyle 線のスタイル。‘solid’ (実線), ‘dashed’ (破線), ‘dashdot’ (破線&点線), ‘dotted’ (点線)
color 線の色
marker マーカーの種類。参考: matplotlib.markers (デフォルト値:”None”)
markersize マーカーの大きさ
markeredgewidth マーカーの枠線の太さ
markeredgecolor マーカーの枠線の色
markerfacecolor マーカーの塗りつぶしの色
markerfacecoloralt マーカーの塗りつぶしの色 2。fillstyle で left, right, bottom, top を指定した際、塗りつぶされない領域が ‘markerfacecoloralt’ で指定された色となります。 (デフォルト値: ‘none’)
fillstyle マーカーの塗りつぶしのスタイル。‘full’ (全体), ‘left’ (左半分), ‘right’ (右半分), ‘bottom’ (下半分), ‘top’ (上半分), ‘none’ (塗りつぶしなし) から選択。
antialiased アンチエイリアス (線を滑らかに描画する処理) を適用するかどうか。False または True から選択。

# グラフの出力例

5 件のデータについて折れ線グラフを出力します。

import numpy as np
import matplotlib.pyplot as plt

# 折れ線グラフを出力

left = np.array([1, 2, 3, 4, 5])
height = np.array([100, 300, 200, 500, 400])
plt.plot(left, height)

# 線の太さや色など見た目の設定

線の太さを 4、線の色を赤 (red) に指定

import numpy as np
import matplotlib.pyplot as plt
 
# 折れ線グラフを出力
left = np.array([1, 2, 3, 4, 5])
height = np.array([100, 300, 200, 500, 400])
plt.plot(left, height, linewidth=4, color="red")

# 複数の線を出力。上から、実線、破線、破線&点線、点線。

import numpy as np
import matplotlib.pyplot as plt
 
# 折れ線グラフを出力
left = np.array([1, 2, 3, 4, 5])
height = np.array([100, 300, 200, 500, 400])
plt.plot(left, height, linestyle="solid")
plt.plot(left, height/2, linestyle="dashed")
plt.plot(left, height/3, linestyle="dashdot")
plt.plot(left, height/4, linestyle="dotted")

# マーカーを表示

マーカー(丸印: o)を出力

import numpy as np
import matplotlib.pyplot as plt
 
# 折れ線グラフを出力
left = np.array([1, 2, 3, 4, 5])
height = np.array([100, 300, 200, 500, 400])
plt.plot(left, height, marker="o")

# マーカー(丸印: o)、枠線なしで出力

plt.plot(left, height, marker="o", markeredgewidth=0)

# マーカーをダイヤモンド型 (D)、サイズ 12、マーカーの枠線のサイズ 3、マーカーの枠線の色 青、マーカーの塗りつぶしの色 水色で出力。

plt.plot(left, height, marker="D", markersize=12, markeredgewidth=3, markeredgecolor="blue",
  markerfacecolor="lightblue")

# マーカーをダイヤモンド型 (s)、サイズ 12、マーカーの枠線のサイズ 3、マーカーの枠線の色 青、マーカーの塗りつぶしの色1 青、マーカーの塗りつぶしの色2 赤、マーカーの塗りつぶし方法 左半分で出力。

plt.plot(left, height, marker="s", markersize=20, markeredgewidth=2, markeredgecolor="black",
  markerfacecolor="blue", markerfacecoloralt="red", fillstyle="left")

# アンチエイリアス (線を滑らかにする処理) を無効化 (上側)

plt.plot(left, height, linewidth=5, antialiased=False)
plt.plot(left, height/2, linewidth=5)

# 凡例、タイトル、ラベルなど

グラフのタイトル、X 軸、Y 軸の名前 (ラベル)、グリッド線を表示

plt.plot(left, height)
plt.title("This is a title")
plt.xlabel("x axis")
plt.ylabel("y axis")
plt.grid(True)

# 左上 (loc=2) に凡例を追加

p1 = plt.plot(left, height, linewidth=2)
p2 = plt.plot(left, height/2, linewidth=2, linestyle="dashed")
plt.legend((p1[0], p2[0]), ("Class 1", "Class 2"), loc=2)

# 棒グラフと折れ線グラフを混在して出力

bar_height = np.array([100, 200, 300, 400, 500])
line_height = np.array([100, 300, 200, 500, 400])

# 棒グラフを出力

fig, ax1 = plt.subplots()
ax1.bar(left, bar_height, align="center", color="royalblue", linewidth=0)
ax1.set_ylabel('Axis for bar')

# 折れ線グラフを出力

ax2 = ax1.twinx()
ax2.plot(left, line_height, linewidth=4, color="crimson")
ax2.set_ylabel('Axis for line')