Matplotlibでグラフの座標軸の向きを反転させる方法

桂誠

INDEX

3つの方法を挙げます。

  1. xlim,ylimの値を数値で直接書き込む方法
  2. Pyplotが設定したxlim,ylimの値を読み出し、反転して書き込む方法
  3. 見た目は一見スマートだが、IIと等価な方法
In [44]:
def plot_test():
    x=np.arange(-10,10)
    y=(0.1*x)**3
    plt.plot(x,y,'ko')
    plt.grid()

plot_test()

方法1.

上のグラフのx軸を反転させる方法として、ネット上で一番見かけるのは、

In [45]:
plot_test()
xlim(10,-10)
Out[45]:
(10, -10)

このように、直接x軸の範囲を指定しる方法です。 しかし、x軸の範囲は自動で決めたいけれど、反転したい、という場合には困ります。

方法2.

自動で範囲を決めてから、それを反転するという方法があります。

In [46]:
plot_test()
plt.xlim(plt.xlim()[::-1])
# 2行に分けると、
#_xlim=plt.xlim()
#plt.xlim(_xlim[::-1])という事。
Out[46]:
(10.0, -10.0)

方法3.

実は反転用の命令も用意されています (参照)

In [47]:
plot_test()
plt.gca().invert_xaxis()
# 2行に分けると、
#ax=plt.gca()
#ax.invert_xaxis()

現在反転しているかどうかを判定する命令もあります。

In [48]:
plot_test()
plt.xlim(plt.xlim()[::-1])
print plt.gca().xaxis_inverted()
True

y軸に対しても同様です。

方法2,3は等価

xlim,ylimを取得してから反転させるのと、特段の差は無いようです。

ただ、もしかしたら将来のバージョンではあらかじめaxesに反転を設定しておく以下の様な例が上手く働くようになるのではないか、と想像しています。

In [82]:
ax=plt.subplot(211)
ax.invert_xaxis()
x=np.arange(-10,10)
y=(0.1*x)**3
plt.plot(x,y,'ko')
plt.grid()

現状では、以下のようにプロットしてからinvertしないと上手く働きません。

In [83]:
ax=plt.subplot(211)
x=np.arange(-10,10)
y=(0.1*x)**3
plt.plot(x,y,'ko')
ax.invert_xaxis()
plt.grid()

おそらく、invert_xaxisの場合でも、内部では

plt.xlim(plt.xlim()[::-1])

と同じ動作をしているのだろうと思います。

なので、最初の例ではデフォルトのxlimの値(0,1)を反転して設定したのでしょう。