matplotlib
前回、PythonのSciPyのcurve_fitでパラメータの範囲を指定する方法を紹介しました。
今回はmatplotlibで軸の値に特定の値を表示する方法、軸の値に文字列や日付を指定する方法を紹介します。
ということでとりあえず簡単にこんな感じのグラフを表示するプログラムを準備してみました。
import matplotlib.pyplot as plt
import random
x_list = range(0, 100)
y_list = [random.randrange(0, 100) for _ in x_list]
fig = plt.figure()
plt.clf()
plt.plot(x_list, y_list)
plt.show()
実行結果
それでは始めていきましょう。
軸の値で表示させたいものを指定する方法
まずは軸の値で表示させたいものを指定する方法を紹介します。
先ほど準備したグラフではX軸の値は「0, 20, 40, 60, 80, 100」と20刻みになっていました。
これを例えば10刻みにしたい場合、「plt.xticks([0, 10, 20, 30, 40, 50, 60, 70, 80, 90, 100])」を追加します。
import matplotlib.pyplot as plt
import random
x_list = range(0, 100)
y_list = [random.randrange(0, 100) for _ in x_list]
fig = plt.figure()
plt.clf()
plt.plot(x_list, y_list)
plt.xticks([0, 10, 20, 30, 40, 50, 60, 70, 80, 90, 100])
plt.show()
実行結果
Y軸の表示する値を変更する場合は「plt.yticks(値のリスト)」です。
import matplotlib.pyplot as plt
import random
x_list = range(0, 100)
y_list = [random.randrange(0, 100) for _ in x_list]
fig = plt.figure()
plt.clf()
plt.plot(x_list, y_list)
plt.yticks([0, 10, 20, 30, 40, 50, 60, 70, 80, 90, 100])
plt.show()
実行結果
ちなみに軸上に表示させたい値を表示させるので、10刻みや20刻みなどのような等間隔の値でなくても大丈夫です。
import matplotlib.pyplot as plt
import random
x_list = range(0, 100)
y_list = [random.randrange(0, 100) for _ in x_list]
fig = plt.figure()
plt.clf()
plt.plot(x_list, y_list)
plt.xticks([0, 10, 20, 30, 40, 50, 100])
plt.show()
実行結果
さらに言うと表示されるグラフの範囲外の値でも大丈夫です。
import matplotlib.pyplot as plt
import random
x_list = range(0, 100)
y_list = [random.randrange(0, 100) for _ in x_list]
fig = plt.figure()
plt.clf()
plt.plot(x_list, y_list)
plt.xticks([0, 10, 20, 30, 40, 50, 100, 500])
plt.show()
実行結果
注意すべきはここで指定しているのはX値のリストのインデックスではなく、純粋にX軸の値を指定していることです。
そのためX値の範囲を0以外のところから始めた場合でもplt.xticksで指定した値が軸に表示されます。
import matplotlib.pyplot as plt
import random
x_list = range(100, 200)
y_list = [random.randrange(0, 100) for _ in x_list]
fig = plt.figure()
plt.clf()
plt.plot(x_list, y_list)
plt.xticks([0, 10, 20, 30, 40, 50, 60, 70, 80, 90, 100, 200])
plt.show()
軸の値に文字列を指定する場合の特定の値の表示方法
軸の値に文字列を指定した場合は単純にXの値を文字列にします。
import matplotlib.pyplot as plt
import random
x_list = ["a", "b", "c", "d", "e", "f", "g", "h", "i", "j", "k",
"l", "m", "n", "o", "p", "q", "r", "s", "t", "u", "v",
"w", "x", "y", "z"]
y_list = [random.randrange(0, 100) for _ in x_list]
fig = plt.figure()
plt.clf()
plt.plot(x_list, y_list)
plt.show()
実行結果
この時、特定の値のみ表示させるにはX値のリストの中で表示させたい要素のインデックスのリストを「plt.xticks」に渡します。
import matplotlib.pyplot as plt
import random
x_list = ["a", "b", "c", "d", "e", "f", "g", "h", "i", "j", "k", "l", "m", "n", "o", "p", "q", "r", "s", "t", "u", "v", "w", "x", "y", "z"]
y_list = [random.randrange(0, 100) for _ in x_list]
fig = plt.figure()
plt.clf()
plt.plot(x_list, y_list)
plt.xticks([0, 2, 4, 6, 8, 10, 12, 14, 16, 18, 20, 22, 24, 26])
plt.show()
実行結果
軸の値に日付を表示する方法
軸の値に日付を表示する方法は、上記の軸の値に文字列を指定して、その中の特定の値を表示する方法を使います。
ということでまずはX軸の値に文字列として日付を表示してみます。
軸の値が見やすい様に「plt.xticks(rotation=90)」で軸の角度を変えています。
import matplotlib.pyplot as plt
import random
x_list = ['2024-01-01', '2024-01-02', '2024-01-03', '2024-01-04', '2024-01-05',
'2024-01-06', '2024-01-07', '2024-01-08', '2024-01-09', '2024-01-10',
'2024-01-11', '2024-01-12', '2024-01-13', '2024-01-14', '2024-01-15',
'2024-01-16', '2024-01-17', '2024-01-18', '2024-01-19', '2024-01-20',
'2024-01-21', '2024-01-22', '2024-01-23', '2024-01-24', '2024-01-25',
'2024-01-26', '2024-01-27', '2024-01-28', '2024-01-29', '2024-01-30']
y_list = [random.randrange(0, 100) for _ in x_list]
fig = plt.figure()
plt.clf()
plt.plot(x_list, y_list)
plt.xticks(rotation=90)
plt.show()
実行結果
1日おきの日付のみ表示させる場合、「plt.xticks」の引数として一つおきの値のリストとして「range(0, len(x_list), 2)」を渡します。
import matplotlib.pyplot as plt
import random
x_list = ['2024-01-01', '2024-01-02', '2024-01-03', '2024-01-04', '2024-01-05',
'2024-01-06', '2024-01-07', '2024-01-08', '2024-01-09', '2024-01-10',
'2024-01-11', '2024-01-12', '2024-01-13', '2024-01-14', '2024-01-15',
'2024-01-16', '2024-01-17', '2024-01-18', '2024-01-19', '2024-01-20',
'2024-01-21', '2024-01-22', '2024-01-23', '2024-01-24', '2024-01-25',
'2024-01-26', '2024-01-27', '2024-01-28', '2024-01-29', '2024-01-30']
y_list = [random.randrange(0, 100) for _ in x_list]
fig = plt.figure()
plt.clf()
plt.plot(x_list, y_list)
plt.xticks(range(0, len(x_list), 2), rotation=90)
plt.show()
実行結果
ここまでは日付を文字列として使用していました。
しかし実はPythonにはdatetime型という日付を扱うための型があります。
またdatetime型はNumPyやPandasでも使えます。
このdatetime型は日時の足し算、引き算もできることから日付や時間を文字列として扱うよりも、このdatetime型で扱っていた方が色々と便利です。
ということでNumPyでdatetime型のアレイを作成して、X軸の値に使ってみましょう。
import matplotlib.pyplot as plt
import numpy as np
import random
date_list = np.arange("2024-01-01", "2024-01-31", dtype=np.datetime64)
val_list = [random.randrange(0, 100) for _ in date_list]
fig = plt.figure()
plt.clf()
plt.plot(date_list, val_list)
plt.xticks(rotation=90)
plt.show()
実行結果
X軸の値をdatetime型で渡すと文字列を渡したときの様に全てが表示されるわけではなく、ある程度の間隔をもって表示されます。
ただこの間隔を変えたかったり、特定の日だけ表示させたいこともあることでしょう。
その様な場合は「plt.xticks」に表示したい日付をリストで渡します。
import matplotlib.pyplot as plt
import numpy as np
import random
date_list = np.arange("2024-01-01", "2024-01-31", dtype=np.datetime64)
val_list = [random.randrange(0, 100) for _ in date_list]
fig = plt.figure()
plt.clf()
plt.plot(date_list, val_list)
plt.xticks(date_list[::2], rotation=90)
plt.show()
実行結果
ここでは1日おきに表示するため、日付のリストである「date_list」を一つおきにした「date_list[::2]」を「plt.xticks」の引数に与えました。
次回はmatplotlibの2軸グラフで表示する軸の値を指定する方法と軸の値を回転させる方法を紹介します。
ではでは今回はこんな感じで。
コメント