皆さんはグラフを作るといったらどういったツールを使うことが多いでしょうか?多くの場合はExcelとかを第一に据える人がほとんどだと思いますが、エクセルってラフにグラフを作るのはいいのですが、細かい調整だったりとかデザインの部分でイマイチ使いにくかったり納得いくデザインに仕上がらないといったこともありますよね。
Excelで作ったグラフをPowerPointに拡張メタファイル形式で持っていて加工する方法は前に説明したのですが、あれも簡易的にマニュアルでずらす方法であってきわめて楽という手段ともいえません。
でも実はpythonデータを読み取ってしまえばExcel以上のきれいなグラフが簡単に作ることができるというのがpythonをいじっている中で分かってきました。
今回はシリーズ物としてpythonを使ったグラフの描き方についていろいろと紹介していこうと思います。第一回目は折れ線グラフにします。
pythonでグラフを書く時にはmatplotlibのモジュールを使う
matplotlibで折れ線グラフはplot()を使う
import numpy as np import matplotlib.pyplot as plt a = np.array ([1,2,3,4,5]) plt.plot(a)
これをベースにいろいろといじっていきましょう。
例えば違うデータを同じグラフの中に重ね書きしたいといった場合にはこんな感じになります。
import numpy as np import matplotlib.pyplot as plt a = np.array ([1,2,3,4,5]) b = np.array([6,7,8,9,10]) plt.plot(a) plt.plot(b)
同じ図表の中に複数のデータを入れ込みたい時には、連続でplot()を書いてあげればよいです。
では次にこれらの二つのデータを分けてグラフ表示したい場合にはどうしたらよいかというと、こんな感じでpythonコードを書きます。
import numpy as np import matplotlib.pyplot as plt a = np.array ([1,2,3,4,5]) b = np.array([6,7,8,9,10]) plt.figure() plt.plot(a) plt.figure() plt.plot(b)
このようにpythonコードを書いてあげると二つのグラフが別々のウィンドウで描画されます。データサイズの異なるグラフを分けて作りたいときはこういった書き方をするのが良いでしょう。どうしてこうすることによって二つのグラフに分けて書けるのかというと、plt.figure()という関数がキモになります。
plt.figure()はいわば空のグラフを作るという関数だといえ、その空の関数の中のplt.plot()で描写をしていくという感じです。二回目のplt.figure()で二つ目の空のグラフがまた初期化されて出てくるので結果的に二つのグラフが出現するというわけです。
matplotlibのでのグラフ描写【やや応用編: add_subplot()】
import numpy as np import matplotlib.pyplot as plt a = np.array ([1,2,3,4,5]) b = np.array([6,7,8,9,10]) fig = plt.figure() ax1 = fig.add_subplot(2,1,1) ax2 = fig.add_subplot(2,1,2) ax1.plot(a) ax2.plot(b)
描写されるグラフはこんな感じで、一つのウィンドウに二つのグラフが描写されました。一つ一つのpythonコードの説明に移ります。まず一つ目のfig = plt.figure()では、figという名前で空のグラフの入れ物を作りますといったニュアンスになります。
次にax1 = fig.add_subplot(2,1,1)の部分ですが、これはfigの中にさらにax1という場所を作ってそれは、figを二行一列に分割してその一行目をax1に割り当てるといったニュアンスのpythonコードになります。次のコードも意味合いは全く一緒で二行目を ax2と割り当ているといった感じです。
そしてそれぞれに割り当てられた場所に実際にグラフ描写を行うplot()関数のpythonコードを書きこみます。
このax1,ax2みたいな書き方は今後タイトルを入れたり、凡例を入れたり、数字の値の範囲を決めたりする際に非常に重要になる書き方なので必ず使えるようになりましょう(他のサイトとかでもax.見たいな書き方が多いのでこのpythonコードの描き方に慣れていると応用がききやすいです)。
ちなみに、一行一列のでax.みたいな書き方をする場合にはこんな感じになります。
import numpy as np import matplotlib.pyplot as plt a = np.array ([1,2,3,4,5]) b = np.array([6,7,8,9,10]) fig = plt.figure() ax = fig.add_subplot(1,1,1) ax.plot(a)