前回最後にちょっと書いたんですが、とりあえずこのコンテンツについての写経は少しずつ減らしていくよう頑張ります。
では、さいきんとにかく名前を聞くMatplotlibさんの出番です。が、なにやらseabornというのも一緒に使うようです。
準備
お約束
import matplotlib.pyplot as plt
import matplotlib as mpl
import seaborn as sns
と、timeitなんかもそうだったけどJupyterがあらかじめ用意してくれてる便利機能のマジックコマンド(ー!デーン!!)
%%matplotlib inline
これでJupyterで図表を表示できるはずです!!
plot&scatter-散布図
plt.plot() or plt.scatter() で図表が表示できます。
plt.plot(x_axis,y_axis,"marker")
or
plt.scatter(x_axis,y_axis)
scatterは基本プロットはo?
plotはmarkerに入れるものでいろいろ選べます
o:丸
v:下三角
.:点
,:四角形
1:Y字
etc.
これでグラフはできますが、タイトルや軸はありません。(でも目盛りはつけてくれる。賢い)
#グラフタイトル
plt.title("titleName")
#軸名
plt.xlabel("xlabel")
plt.ylabel("ylabel")
#グリッド線
plt.glid(True)
これでグラフがまずはグラフっぽく成ります(意味不明)
連続グラフ
plt.plot(xaxis,yaxis,label="Label")
plt.legend()
Labelの有無(あとはlegend)で連続か離散か判別してるのかな?plotの第3引数がmarkerかlabelかでかわるみたい。
そしてlegendはRみを感じる。まぁグラフの一般的な~ってやつですからそんなもんでしょうな。
subplot
plt.subplot(行,列,number)
plt.plot(x,y)
グラフを行列の要素のように複数に分けて作成する。
あと、初登場のmethod
np.linspace(-10,10,100)
-10から10までを100分割した数字リストを取り出す…………。
???np.arangeはどうした?
とおもってarangeで試すもグラフは真っ白。調べてみる。
すると衝撃の事実が!!
ええ、結果的にここで重要なのは
・np.arangeはint型の要素をもったarrayを返す
・np.linspaceはfloat型
そりゃグラフは真っ白だ。小数が必要な時np.arangeはうまくいかないんですね。
ヒストグラム
plt.hist(array,bins=__,range=(__,__))
第一引数は配列を渡しとけばそれを勝手に集計してくれる。
binsっていうのはヒストグラムの棒の数。
rangeはその名の通りどの範囲を表示するのか。
だから例えば
plt.hist(np.arange(0,101), bins=100,range=(0,80))
plt.grid(True)
とすると不連続で高さ一様な棒が大量に出現します。
plt.hist(np.arange(0,101), bins=*1000*,range=(0,80))
plt.grid(True)
だと、棒は細すぎてもはや線です
練習問題
編集が長かったchap2の節別練習問題もこれで最後。がんばりましょー!
問題1
x=np.arange(-10,10,10)
np.linspaceでもかまわない
y=np.array(5*x+3)
plt.plot(x,y,label='Label')
plt.legend()
plt.title('title')
plt.xlabel('X')
plt.ylabel('Y')
問題2
plt.subplot(1,2,1)
x=np.linspace(-10,10,100)
plt.plot(x,np.sin(x))
plt.title('sin')
plt.subplot(1,2,2)
plt.plot(x,np.cos(x))
plt.title('cos')
問題3
import numpy.random as random
random.seed(0)
plt.subplot(1,2,1)
x=np.random.uniform(0,1,1000)
plt.hist(x,bins=100,range=(0,1))
plt.title('1000-1')
plt.subplot(1,2,2)
x=np.random.uniform(0,1,1000)
plt.hist(x,bins=100,range=(0,1))
plt.title('1000-2')
続きは別窓に入力して
plt.subplot(1,2,1)
x=np.random.uniform(0,1,10000)
plt.hist(x,bins=100,range=(0,1))
plt.title('10000')
plt.subplot(1,2,2)
x=np.random.uniform(0,1,100)
plt.hist(x,bins=100,range=(0,1))
plt.title('100')
けっこう1000個の2ヒストグラムで形が違いますね。
でも10000までいくとだいぶ長方形っぽくなります。試行回数を増やすことで確率が平均化されてくるということでしょう。
最後に
・グラフってやっぱかっこいい!!
・けっこうnumpy使いが手馴れてきた感がある。うれしい。
以上!!
続く総合問題についてを次回掲載します。
それが終わったらいったん溜まってるRの小ネタ・Javaのjarアプリ系、加えて暇があればAndroidアプリについて書きたいと思います。