課題7 雨量データのグラフ化
雨量データの整理課題ではnp.random.lognormal(1, 1, 24*365)を使って対数正規分布に従った時間雨量データを作成し,毎時雨量データの棒グラフと毎時雨量データの出現頻度のヒストグラムを作成しました.これをMatplotlibで実際に行ってみましょう.ファイル名はHourly_precipitation.pyとしましょう.データの個数は24*365ではなく,100,1000,10000の三種類を実行し,それぞれをグラフ化しましょう.ちなみに,下の関数群は既存のaxesに追加する場合を記載していますが,figureオブジェクトに追加する場合はfig.add_barなどの形になります.
axes.bar(x,y[,width=0.8]…, **kwargs)
棒グラフを作成します.
widthは棒グラフの太さを指定します.
kwargsはcolorやedgecolor,linewidthなどの体裁オプション群を指します.
棒グラフを作成します.
widthは棒グラフの太さを指定します.
kwargsはcolorやedgecolor,linewidthなどの体裁オプション群を指します.
axes.hist(y[,x][,nbins=10][,range][,normed=False][,cumulative=False]…, **kwargs)
データ配列yに従いヒストグラムを作成します.
Yはヒストグラムが対象とする範囲を指定します.
nbinsは階級数(分割度)を指定します.ヒストグラムが(0,1,2)や(0,0.1,0.8)のような離散値で,その数値が既知の場合はnbinsに配列を与えることで正確なヒストグラムが作成できます.
rangeは上限と下限を指定したタプル形式のデータです.
normedは合計値が1となる正規化(normalize)の有無を指定します(※最新版のnumpyではnormed→densityに変更になりました).
cumulativeは各データの累積値を示します.
np.histogramという関数でこの関数の元データを作成できます.これを使用すれば近似解としての95%値などの抽出と描画も可能になります.
データ配列yに従いヒストグラムを作成します.
Yはヒストグラムが対象とする範囲を指定します.
nbinsは階級数(分割度)を指定します.ヒストグラムが(0,1,2)や(0,0.1,0.8)のような離散値で,その数値が既知の場合はnbinsに配列を与えることで正確なヒストグラムが作成できます.
rangeは上限と下限を指定したタプル形式のデータです.
normedは合計値が1となる正規化(normalize)の有無を指定します(※最新版のnumpyではnormed→densityに変更になりました).
cumulativeは各データの累積値を示します.
np.histogramという関数でこの関数の元データを作成できます.これを使用すれば近似解としての95%値などの抽出と描画も可能になります.
回答
[課題1]
Hourly_precipitation.py
Hourly_precipitation.py
- import numpy as np
- import matplotlib.pyplot as plt
- from matplotlib.ticker import FixedLocator
-
- lst = [100,1000,10000] #number of data
-
- #ここからはあくまで一例です.
- fig = plt.figure()
-
- for order,number in enumerate(lst):
- #グラフを描画する
- data = np.random.lognormal(1,1,number)
- x = range(number)
- ax1 = fig.add_subplot(2,3,order+1) #1行3列の一行目
- ax2 = fig.add_subplot(2,3,order+4) #1行3列の二行目
- ax1.bar(x,data,width=0.5) #細めの棒グラフ
- ax2.hist(data,x,normed=True)
-
- #体裁を整える
- axes =[ax1,ax2]
- for val in axes:
- val.tick_params(direction="in",right="on",top="on",which="both")
-
- ax1.set_xlim([0,number])
- ax1.set_ylim([0,50])
-
- ax2.set_xlim([0,50])
- ax2.set_ylim([0,0.2])
-
- ax1.set_title("Data:"+str(number))
-
- ax2.set_xlabel("Precipitation[mm]")
-
- ax2.xaxis.set_major_locator(FixedLocator(range(0,51,10)))
- if order == 0: #1st column
- ax1.set_ylabel("Precipitation[mm]")
- ax2.set_ylabel("Probability")
- else:
- ax1.yaxis.set_ticklabels([]) #delete unneeded tick labels
- ax2.yaxis.set_ticklabels([])
-
- plt.show()
-

データ数が増えるにつれてヒストグラムが確率分布に従い滑らかになっていくことが分かると思います.
添付ファイル