matplotlibでグラフを作成する方法には、大きく分けて2つの種類があります。
しかし、ネット上ではこの2種類のコードが混在しているため、使い分けについて意識しておかないと混乱することがあります。
そこで、今回はその使い分けについて解説します。
ちなみに、複数グラフの配置やグラフサイズについては、「figureやaxを使う書き方」で解説します。
1.2種類のグラフ作成方法について
matplotlibを用いた2種類のグラフの作成方法とは、簡単に言うと「figureやaxを使うか使わないか」の違いです。
少し詳しいことを言うと、
- figureやaxを使う書き方 = オブジェクト指向型
- figureやaxを使わない書き方 = インターフェース型
というような分類ができますが、ここを詳しく考えると逆にややこしくなるので、ここでは解説は控えます。
肝心な使い分けですが、
- 1つのグラフを簡単に作りたい場合 = figureやaxを使わない書き方
- 複数のグラフを作ったり、細かい設定をしたい場合 = figureやaxを使う書き方
というように使い分けると良いと思います。
ただし、1つのグラフを作る場合でも、凡例や軸等を細かく設定したい場合もあると思うので、おすすめは「figureやaxを使う書き方」です。
では、次の章から実際にグラフの作成方法の種類について学んでいきましょう。
- 1つのグラフを簡単に作りたい場合 = figureやaxを使わない書き方
- 複数のグラフを作ったり、細かい設定をしたい場合 = figureやaxを使う書き方
- おすすめは「figureやaxを使う書き方」
2.figureやaxを使わない書き方(インターフェース型)
まず、figureやaxを使わない書き方について解説します。
この書き方では、plt.plot(x,y)という書き方で図化を行います。
では、下のコードを実行してみてください。
import numpy as np import matplotlib.pyplot as plt x = np.arange(51) y = x**2 plt.plot(x, y) plt.show()
すると、y=x**2のグラフが作成できます。(x**2とは、xの2乗のことです。)
実際に図化を行っているのは、たった1行「plt.plot(x,y)」の部分だけです。
この書き方はグラフを作成するために書くコードが短く、素早く図化できるため、簡単なチェック等に向いています。
ただし、複数グラフを作成し並べて表示するなど、複雑な処理はできないためあくまでチェック用に使うことをお勧めします。
- plt.plot(x,y)という書き方で図化
- グラフを作成するために書くコードが短く、素早く図化できる
- 簡単なチェック等に向いてる
3.figureやaxを使う書き方(オブジェクト指向型)
では次に、figureやaxを使う書き方について解説します。
1.matplotlibのfigureやaxって何?
まずは、グラフの書き方の前に、figureやaxとは何かについて簡単に説明したいと思います。
それぞれの意味は、下のようなものです。
- figure:グラフを書くための紙
- ax:実際に書くグラフ
文章だと分かりずらいので、図化すると下のようなイメージです。
上の図では、figureという1枚の紙の上に、ax1~ax4という4つのグラフが書かれた状態を示しています。
このイメージをしっかりと持ったうえで、次の章で実際にグラフを作成してみましょう!
2.figureやaxを用いたグラフの作成(add_subplot)
では、実際にfigureやaxを用いてグラフを作成します。
まずは下のコードを実行してみてください。
import numpy as np import matplotlib.pyplot as plt x = np.arange(51) y = x**2 fig = plt.figure(figsize=(8,5)) ax = fig.add_subplot(111) ax.plot(x, y) plt.show()
すると、下のように「2.figureやaxを使わない書き方」と同様のグラフが作成できました。
「2.figureやaxを使わない書き方」と比較すると、「plt.plot(x,y)」で済んでいた描画のコードが、
fig = plt.figure(figsize=(8,5)) ax = fig.add_subplot(111) ax.plot(x, y)
という3行に置き換わり、少し長くなったことが分かります。
ではこの3行について詳しく解説していきます。
まず、1行目の
fig = plt.figure(figsize=(8,5))
ですが、「plt.figure()」で、figure(グラフを書く紙)を準備しています。
その際、plt.figureの()の中の「figsize」でfigureの大きさを指定しています。
今回は8×5のfigureを準備しています。(幅×高さ)
次に、2行目の
ax = fig.add_subplot(111)
ですが、ここでは「fig.add_subplot()」でaxを準備しています。
その際、fig.add_subplotの()で、axの場所を指定しています。
axの場所指定については、以下のルールで指定します。
言葉では分かりにくいので、これを図化すると下のようになります。(下の図は、2行2列のaxの場合です。)
そして、axの番号は1から始まり、「左上から右方向に、また端までいったら次の行に移る」という順番に数字が大きくなります。
順番としては、「Z」のような形です。
実際にax = fig.add_subplot(111)の(111)の部分を、(221)や(332)に変えてどのようになるか確認してみるとより理解が深まると思います。
((221)の場合は、2×2の中の左上の部分、(332)の場合は、3×3の真ん中上の部分にグラフが描画されます。)
最後に、3行目の
ax.plot(x, y)
ですが、これは「作成したaxにプロットする」という意味で、axを指定してplt.plot()を行っていることと同じになります。
3.複数グラフを並べてみよう
では、先ほど学んだことを用いて、1つのグラフを並べてみようと思います。
やることは、同じfigure上に横並びのaxを準備し、それぞれにグラフを描画する、といった手順です。
では、下のコードを実行してみてください。
import numpy as np import matplotlib.pyplot as plt x = np.arange(51) y1 = x**2 y2 = x + 10 fig = plt.figure(figsize=(16,5)) ax1 = fig.add_subplot(121) ax2 = fig.add_subplot(122) ax1.plot(x, y1) ax2.plot(x, y2) plt.show()
すると、下のように2つのグラフを並べることができました。
(figureサイズ:幅16、高さ5 ax:1行2列)
このように、複数のaxを用いる時は、ax1・ax2と名前を分けてつけ、それぞれの描画位置を指定して描画します。
これで、figureとaxを用いた作図について理解できたと思います!
- figureはグラフを書くための紙、axは実際に書くグラフというイメージ
- 「plt.figure()」でfigure(グラフを書く紙)を準備
- 「fig.add_subplot()」でaxを準備
4.おわりに
今回は、matplotlibでグラフを作成する際の、2種類の方法について解説しました。
私自身、グラフの作成についてネットで学んで居る際に、このfigureやaxを使っているものと使っていないものが混在していたことでかなり混乱しました。
この2つの書き方はしっかりと分けて理解し、特にfigureやaxについてのイメージできていれば、グラフ作成で迷うことが減ると思います。
このサイトで皆さんの疑問が少しでも解決出来たら幸いです。
なお、このサイトでは初心者の方向けに「Python初心者入門講座」という講座を作成していますので、気になった方はそちらもご覧ください。
コメント