#!/usr/bin/env python # coding: utf-8 # # matplotlibでグラフ作成 # # # ## Python3のインストール # # 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 # ``` # # ## 通常のPythonでの使い方 # # コマンドラインで入力データファイルと出力画像ファイルを指定 # # ``` # 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() # ``` # # ## Jupyter Notebookのインストール # # ここ( http://jupyter.org/install.html )に従ってインストール. # ただし,Python3, numpy, scipy, matplotlibは導入済みの環境です. # # ``` # pip3 install --upgrade pip # pip3 install jupyter # ``` # # これでインストールは完了.以下で起動できます. # # ``` # jupyter notebook # ``` # # 起動すると,起動したディレクトリ内の,子ディレクトリとファイルが並んだ画面が現れます. # # # # ## Jupyter Nootbookでグラグを表示 # 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 # # ...... ...... ..... ...... ...... ...... ...... # ``` # # In[1]: 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') # ## グラフの見栄えを調整 (1) # # + グラフの大きさを指定: fig=plt.figure(figsize=(8,6)) # + 軸ラベル表示(xlabel, ylabel) # + 軸範囲設定 (xlim, ylim) # + 目盛り設定(xticks, yticks) # + グリッド表示(grid) # + 凡例表示(legend) # # In[5]: 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) # ## グラフの見栄えを調整 (2) # # 軸目盛りを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)) # ``` # # In[4]: 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) # ## 情報の追加 # # # In[5]: 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') # In[ ]: