※パート2は、こちらです。
パート3では、グラフの描画を説明します。
簡単なグラフの描き方
pltとしてimportしてあるmatplotlib.pyplotを用いると、散布図や折れ線グラフはすぐに表示できます。
散布図については、対象データのx座標のリストとy座標のリストを用意して、plt.scatter()に渡します。「座標(x,y)のリスト」を渡すわけではないのでご注意ください。
In [1]: data_x = np.arange(15) In [2]: data_y = data_x ** 2 In [3]: data_x Out[3]: array([ 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14]) In [4]: data_y Out[4]: array([ 0, 1, 4, 9, 16, 25, 36, 49, 64, 81, 100, 121, 144, 169, 196]) In [5]: plt.scatter(data_x,data_y) Out[5]: <matplotlib.collections.PathCollection at 0x4ddd610>
グラフの見栄えについては、各種オプションを駆使して調整が可能です。
折れ線グラフについては、x座標のリストとy座標のリストをplt.plot()に渡します。次の例では、np.sin()にリスト(array)を渡しているので、data_yにも結果がリスト(array)として返っている点に注意してください。
In [6]: data_x = np.linspace(0,1,100) In [7]: data_y = np.sin(2*np.pi*data_x) In [8]: plt.plot(data_x,data_y) Out[8]: [<matplotlib.lines.Line2D at 0x52e9610>]
その他に便利なのが(x,y)平面上の値を色で表現する「ヒートマップ」です。次のように、二次元のリストで値を表現したデータをplt.imshow()に渡します。
In [9]: data = [ [x**2+y**2 for x in range(5)] for y in range(5)] In [10]: data Out[10]: [[0, 1, 4, 9, 16], [1, 2, 5, 10, 17], [4, 5, 8, 13, 20], [9, 10, 13, 18, 25], [16, 17, 20, 25, 32]] In [11]: plt.imshow(data,extent=(0,4,4,0),interpolation='nearest') Out[11]: <matplotlib.image.AxesImage at 0x4efa590>
extentは、座標に振るメモリの範囲を左下を原点にして、(xmin,xmax,ymin,ymax)で指定します。ここでは、右上を原点にするように(0,4,4,0)という値にしています。
interpolationの指定をはずすと、なめらかに変化するように補間処理が行われます。
In [12]: plt.imshow(data,extent=(0,4,4,0)) Out[12]: <matplotlib.image.AxesImage at 0x4eef710>
1つのウィンドウに複数のグラフを表示する際は、subplotの機能を使います。ウィンドウを表すfigureオブジェクトを取得して、add_subplot()メソッドでウィンドウ内のグラフ描画領域を追加します。add_subplot(縦方向の数、横方向の数、場所)で位置を指定します。(場所は、左上を原点にして、はじめに下に進みます。)
In [52]: fig = plt.figure() In [53]: subplot = fig.add_subplot(1,2,1) In [54]: linex = np.linspace(0,1,100) In [55]: subplot.plot(linex, sin(2*np.pi*linex)) Out[55]: [<matplotlib.lines.Line2D at 0x4e0e0d0>] In [56]: subplot = fig.add_subplot(1,2,2) In [57]: subplot.plot(linex, cos(2*np.pi*linex)) Out[57]: [<matplotlib.lines.Line2D at 0x5df18d0>] In [58]: fig.show()
その他には、DataFrameオブジェクトは、自分自身のグラフを描く機能を持っています。
In [90]: df=DataFrame(np.random.randn(5,4)+3,columns=['A','B','C','D']) In [91]: df Out[91]: A B C D 0 4.252865 3.672608 0.698344 3.001572 1 1.934676 3.724904 2.537281 2.800158 2 2.415245 1.254247 4.158918 1.914211 3 2.866201 1.036816 3.497218 2.876337 4 2.814133 3.262919 3.196999 4.132647 In [92]: df.plot(kind='bar') Out[92]: <matplotlib.axes._subplots.AxesSubplot at 0x5dc0850>