【matplotlib】グラフの原点(0, 0)に軸を配置する方法[Python]

  • URLをコピーしました!
目次

matplotlib

前回、PythonのmatplotlibでY軸を2本にした際、Y軸を片側に寄せる方法を紹介しました。

今回はmatplotlibでグラフの原点(0, 0)に軸を配置する方法を紹介します。

まずはこんな感じで曲線を描いてみました。

import matplotlib.pyplot as plt

x = range(-10, 11)
y = [i**3 for i in x]

fig = plt.figure()
plt.clf()

plt.plot(x, y)

plt.grid()

plt.show()

実行結果

デフォルトの状態ではX軸は下に、Y軸は左に表示されています。

今回はこれらX軸、Y軸を原点で交差するように移動させます。

それでは始めていきましょう。

X軸とY軸が原点で交差するように配置する方法

X軸とY軸が原点で交差するように配置するには「plt.gca().spines[‘bottom’].set_position((‘data’, 0))」でX軸をY軸の中心に、「plt.gca().spines[‘left’].set_position((‘data’, 0))」でY軸をX軸の中心に移動させます。

この「set_position()」の使い方は次回また紹介しますので、今回はとりあえずこれでそれぞれ原点に移動すると覚えておいてください。

import matplotlib.pyplot as plt

x = range(-10, 11)
y = [i**3 for i in x]

fig = plt.figure()
plt.clf()

plt.plot(x, y)

plt.grid()

plt.gca().spines['bottom'].set_position(('data', 0))
plt.gca().spines['left'].set_position(('data', 0))

plt.show()

実行結果

それぞれの軸は原点に移動できたのですが、左の枠の線と下の枠の線が消えてしまっています。

ということで次に見た目をスッキリさせてみましょう。

外枠の線を消す方法

見た目をスッキリさせる方法の一つ目は、外枠の線を消してしまう方法です。

これは前にこちらの記事で紹介した方法で枠線を消してしまうということです。

具体的には「plt.gca().spines[‘場所’].set_visible(False)」で指定した場所の枠線を消すことができます。

今回は先ほど残った右と上を消したいので、「plt.gca().spines[‘right’].set_visible(False)」と「plt.gca().spines[‘top’].set_visible(False)」を追加します。

import matplotlib.pyplot as plt

x = range(-10, 11)
y = [i**3 for i in x]

fig = plt.figure()
plt.clf()

plt.plot(x, y)

plt.grid()

plt.gca().spines['bottom'].set_position(('data', 0))
plt.gca().spines['left'].set_position(('data', 0))

plt.gca().spines['right'].set_visible(False)
plt.gca().spines['top'].set_visible(False)

plt.show()

実行結果

外枠の線を追加する方法

もう一つの方法はもう一つグラフエリアを重ね合わせて、枠線を表示するという方法です。

この場合は「ax1 = fig.subplots()」で1つ目のグラフエリアを作成し、そこにデータをプロットします。

そしてさらに「ax2 = ax1.twinx()」で2つ目のグラフエリアを作成し、「ax2.tick_params(labelright=False, right=False)」でラベルと補助目盛りを削除します。

import matplotlib.pyplot as plt

x = range(-10, 11)
y = [i**3 for i in x]

fig = plt.figure()
plt.clf()

ax1 = fig.subplots()

ax1.plot(x, y)

ax1.grid()

ax1.spines['bottom'].set_position(('data', 0))
ax1.spines['left'].set_position(('data', 0))

ax2 = ax1.twinx()
ax2.tick_params(labelright=False, right=False)

plt.show()

実行結果

ちなみにこのように「ax1 = fig.subplots()」とした場合は軸を移動させるのは「ax1.spines[‘位置’].set_position((‘data’, 0))」となり、「plt.gca()」ではなくなるのに注意してください。

今回は軸を原点に動かしましたが、次回はさらに軸を任意の位置に動かす方法を紹介します。

ではでは今回はこんな感じで。

よかったらシェアしてね!
  • URLをコピーしました!

コメント

コメントする

目次