Python3は,brew install python3 で普通にインストール.Puyhon3.6.0がインストールされます.
あとは pip3 をアップグレードして,モジュール類を pip3 でインストールしています.
brew install python3 # Python3.6.0
pip3 install --upgrade setuptools
pip3 install --upgrade pip
brew linkapps
pip3 install numpy
pip3 install scipy
pip3 install matplotlib
pip3 install Pillow
コマンドラインで入力データファイルと出力画像ファイルを指定
import numpy as np
import matplotlib.pyplot as plt
import sys
# Parameter setting
param=sys.argv
fnameR=param[1] # input filename
fnameF=param[2] # output image file name
......
plt.savefig(fnameF,dpi=200, bbox_inches='tight', pad_inches=0.2)
plt.show()
plt.close()
ここ( http://jupyter.org/install.html )に従ってインストール. ただし,Python3, numpy, scipy, matplotlibは導入済みの環境です.
pip3 install --upgrade pip
pip3 install jupyter
これでインストールは完了.以下で起動できます.
jupyter notebook
起動すると,起動したディレクトリ内の,子ディレクトリとファイルが並んだ画面が現れます.
Jupyter notebookでグラフを表示するため,コードの先頭に以下を記載.
%matplotlib inline
でも毎回起動のたびに書き込むのはめんどう.そこで...
ここ(http://keisanbutsuriya.hateblo.jp/entry/2015/11/28/220429) に従い,以下を実行.
ipython profile create
これで~/.ipython/profile_defaultにipython_config.pyというファイルができるのでこれを開いて編集.
## lines of code to run at IPython startup.
#c.InteractiveShellApp.exec_lines = []
c.InteractiveShellApp.exec_lines = ['%matplotlib inline']
上記の部分3行目 c.InteractiveShellApp.exec_lines = ['%matplotlib inline'] を書き込む.
これで,毎回%matplotlib inlineを書き込まずにすむ.
ここではnumpyでファイル'out_weir.txt'からデータを読み込む
まずは,x軸データをQQ,y軸をEL1およびEL2として,プロットしてみる
入力データは以下のような形式のものである.
elv1 elv2 Q h2/h1 x1 x2 x3
63.000 60.290 0.000
63.062 60.324 1.000 -43.461 0.062 -99.000 -99.000
63.097 60.358 2.000 -27.262 0.097 -99.000 -99.000
63.126 60.392 3.000 -20.684 0.126 -99.000 -99.000
...... ...... ..... ...... ...... ...... ......
import numpy as np
import matplotlib.pyplot as plt
def DINP(fnameR):
data=np.loadtxt(fnameR,skiprows=1,usecols=(0,1,2))
EL1=data[:,0]
EL2=data[:,1]
QQ=data[:,2]
return EL1,EL2,QQ
fnameR='out_weir.txt'
EL1,EL2,QQ=DINP(fnameR)
# Plot
fig=plt.figure()
plt.plot(QQ,EL1,color='red',lw=2.0,label='Upstream WL')
plt.plot(QQ,EL2,color='blue',lw=2.0,label='Downstream WL')
[<matplotlib.lines.Line2D at 0x105047588>]
import numpy as np
import matplotlib.pyplot as plt
def DINP(fnameR):
data=np.loadtxt(fnameR,skiprows=1,usecols=(0,1,2))
EL1=data[:,0]
EL2=data[:,1]
QQ=data[:,2]
return EL1,EL2,QQ
fnameR='out_weir.txt'
EL1,EL2,QQ=DINP(fnameR)
qmin=0.0;qmax=700.0;dq=100
emin=60.0;emax=68.0;de=1.0
fig=plt.figure(figsize=(8,6))
plt.plot(QQ,EL1,color='red',lw=2.0,label='Upstream WL')
plt.plot(QQ,EL2,color='blue',lw=2.0,label='Downstream WL')
plt.xlabel('Discharge (m$^3$/s)')
plt.ylabel('Elevation (EL.m)')
plt.xlim(qmin,qmax)
plt.ylim(emin,emax)
plt.xticks(np.arange(qmin,qmax+dq,dq))
plt.yticks(np.arange(emin,emax+de,de))
plt.grid()
plt.legend(shadow=True,loc='upper left',handlelength=3)
<matplotlib.legend.Legend at 0x10426f780>
軸目盛りをtickerを用いて描画
......
from matplotlib.ticker import *
......
ax = plt.gca()
ax.xaxis.set_major_locator(MultipleLocator(dq))
ax.xaxis.set_minor_locator(MultipleLocator(dq/10))
ax.yaxis.set_major_locator(MultipleLocator(de))
ax.yaxis.set_minor_locator(MultipleLocator(de/2))
import numpy as np
import matplotlib.pyplot as plt
from matplotlib.ticker import *
def DINP(fnameR):
data=np.loadtxt(fnameR,skiprows=1,usecols=(0,1,2))
EL1=data[:,0]
EL2=data[:,1]
QQ=data[:,2]
return EL1,EL2,QQ
fnameR='out_weir.txt'
EL1,EL2,QQ=DINP(fnameR)
qmin=0.0;qmax=700.0;dq=100
emin=60.0;emax=68.0;de=1.0
fig=plt.figure(figsize=(8,6))
plt.plot(QQ,EL1,color='red',lw=2.0,label='Upstream WL')
plt.plot(QQ,EL2,color='blue',lw=2.0,label='Downstream WL')
plt.xlabel('Discharge (m$^3$/s)')
plt.ylabel('Elevation (EL.m)')
plt.xlim(qmin,qmax)
plt.ylim(emin,emax)
ax = plt.gca()
ax.xaxis.set_major_locator(MultipleLocator(dq))
ax.xaxis.set_minor_locator(MultipleLocator(dq/10))
ax.yaxis.set_major_locator(MultipleLocator(de))
ax.yaxis.set_minor_locator(MultipleLocator(de/2))
plt.grid()
plt.legend(shadow=True,loc='upper left',handlelength=3)
<matplotlib.legend.Legend at 0x103f856a0>
import numpy as np
import matplotlib.pyplot as plt
def DINP(fnameR):
data=np.loadtxt(fnameR,skiprows=1,usecols=(0,1,2))
EL1=data[:,0]
EL2=data[:,1]
QQ=data[:,2]
return EL1,EL2,QQ
fnameR='out_weir.txt'
EL1,EL2,QQ=DINP(fnameR)
qmin=0.0;qmax=700.0;dq=100
emin=60.0;emax=68.0;de=1.0
fig=plt.figure(figsize=(8,6))
plt.plot(QQ,EL1,color='red',lw=2.0,label='Upstream WL')
plt.plot(QQ,EL2,color='blue',lw=2.0,label='Downstream WL')
plt.xlabel('Discharge (m$^3$/s)')
plt.ylabel('Elevation (EL.m)')
plt.xlim(qmin,qmax)
plt.ylim(emin,emax)
plt.xticks(np.arange(qmin,qmax+dq,dq))
plt.yticks(np.arange(emin,emax+de,de))
plt.grid()
plt.legend(shadow=True,loc='upper left',handlelength=3)
QQ1=87
for i in range(0,len(EL1)):
if QQ[i]==QQ1: break
elv1=EL1[i]; s1='EL'+'{0:.1f}'.format(elv1); s2='Q='+'{0:.0f}m$^3$/s'.format(QQ1)
plt.plot([0,QQ1],[elv1,elv1],color='black',lw=1)
plt.plot([QQ1,QQ1],[emin,elv1],color='black',lw=1)
plt.text(QQ1,elv1,s1, ha='right', va='bottom', fontsize=9)
plt.text(QQ1+5,61,s2, ha='left', va='bottom', rotation=90, fontsize=9)
QQ1=290
for i in range(0,len(EL1)):
if QQ[i]==QQ1: break
elv1=EL1[i]; s1='EL'+'{0:.1f}'.format(elv1); s2='Q='+'{0:.0f}m$^3$/s'.format(QQ1)
plt.plot([0,QQ1],[elv1,elv1],color='black',lw=1)
plt.plot([QQ1,QQ1],[emin,elv1],color='black',lw=1)
plt.text(QQ1,elv1,s1, ha='right', va='bottom', fontsize=9)
plt.text(QQ1+5,61,s2, ha='left', va='bottom', rotation=90, fontsize=9)
QQ1=580
for i in range(0,len(EL1)):
if QQ[i]==QQ1: break
elv1=EL1[i]; s1='EL'+'{0:.1f}'.format(elv1); s2='Q='+'{0:.0f}m$^3$/s'.format(QQ1)
plt.plot([0,QQ1],[elv1,elv1],color='black',lw=1)
plt.plot([QQ1,QQ1],[emin,elv1],color='black',lw=1)
plt.text(QQ1,elv1,s1, ha='right', va='bottom', fontsize=9)
plt.text(QQ1+5,61,s2, ha='left', va='bottom', rotation=90, fontsize=9)
plt.hlines([60.3],qmin,qmax,linestyle='solid')
plt.hlines([63.0],qmin,qmax,linestyle='dashed')
plt.text(0.5*(qmin+qmax),63.0,'EL.63.0 (Top of weir, B=50m)', ha='center', va='bottom')
plt.text(0.5*(qmin+qmax),60.3,'EL.60.3 (Bottom of river)', ha='center', va='bottom')
<matplotlib.text.Text at 0x10d9cff98>