tag:crieit.net,2005:https://crieit.net/tags/matplotlib/feed 「matplotlib」の記事 - Crieit Crieitでタグ「matplotlib」に投稿された最近の記事 2021-01-25T03:06:35+09:00 https://crieit.net/tags/matplotlib/feed tag:crieit.net,2005:PublicArticle/16648 2021-01-25T03:06:35+09:00 2021-01-25T03:06:35+09:00 https://crieit.net/posts/Python-95 Pythonで95パーセンタイル区間を色塗り <h1 id="95パーセンタイル(95 percentile)を色塗り"><a href="#95%E3%83%91%E3%83%BC%E3%82%BB%E3%83%B3%E3%82%BF%E3%82%A4%E3%83%AB%2895+percentile%29%E3%82%92%E8%89%B2%E5%A1%97%E3%82%8A">95パーセンタイル(95 percentile)を色塗り</a></h1> <pre><code class="python">up=np.zeros(141) #塗りつぶす範囲の上縁 down=np.zeros(141) #塗りつぶす範囲の下縁 for i in range(141): b=loss_all[((parameters[:,0]-i/10-0.5)*(parameters[:,0]-i/10-1) <= 0)] up[i]=np.percentile(b,q=[2.5,97.5])[1] down[i]=np.percentile(b,q=[2.5,97.5])[0] plt.figure(figsize=(6, 6), dpi=150) plt.tick_params(labelsize=15) plt.scatter(parameters[:,0],loss_all,s=10, alpha=0.3) plt.fill_between(np.arange(141)/10+0.5,up,down,color='red',alpha=0.4) plt.xlabel('Hs1[m]') plt.ylabel('Test absolute error of sea state parameters') #plt.ylim(-2,2) plt.grid() plt.show() </code></pre> <p><a href="https://crieit.now.sh/upload_images/c45e68ad33678bfa3b123e2fc7345bd3600db6b05015d.png" target="_blank" rel="nofollow noopener"><img src="https://crieit.now.sh/upload_images/c45e68ad33678bfa3b123e2fc7345bd3600db6b05015d.png?mw=700" alt="image" /></a></p> kawai_mizugorou tag:crieit.net,2005:PublicArticle/16632 2021-01-19T15:49:02+09:00 2021-01-19T15:49:02+09:00 https://crieit.net/posts/Contour-maps-in-polar-coordinate 極座標で等高線図を作成(Contour maps in polar coordinate) <h1 id="はじめに"><a href="#%E3%81%AF%E3%81%98%E3%82%81%E3%81%AB">はじめに</a></h1> <p> Pythonで極座標形式の等高線図を描く方法を紹介します.<a target="_blank" rel="nofollow noopener" href="https://matplotlib.org/api/_as_gen/matplotlib.pyplot.contour.html">matplotlibの公式ドキュメント</a>を参考にしたので,詳しくはそちらをご覧ください.</p> <p> 本記事では,描き方の使用例として海の波の様子を表示させます.従って,変数は波の高さ・周波数・波向きの3つです.極座標形式の等高線図の周方向が波向きを,中心からの距離が周波数を,等高線の色が波高さを示します.</p> <h1 id="本編"><a href="#%E6%9C%AC%E7%B7%A8">本編</a></h1> <h2 id="準備"><a href="#%E6%BA%96%E5%82%99">準備</a></h2> <p>まずはモジュールのインポート</p> <pre><code class="python">import numpy as np import pandas as pd import matplotlib.pyplot as plt import matplotlib.cm as cm </code></pre> <p>続いては表示させたいデータをインポート.<br /> 本記事では,あらかじめ用意したcsvファイルを読み込みました.ファイルは25行36列のデータです.行は周波数を表し,列は波向きです.</p> <pre><code class="python">a = pd.read_csv("GA.csv",engine='python',header=None,skiprows=0) GA =a.values </code></pre> <h2 id="極座標等高線図の作成"><a href="#%E6%A5%B5%E5%BA%A7%E6%A8%99%E7%AD%89%E9%AB%98%E7%B7%9A%E5%9B%B3%E3%81%AE%E4%BD%9C%E6%88%90">極座標等高線図の作成</a></h2> <p>まずは,周方向と中心からの距離の軸を設定します.</p> <p>ここで注意したいのが,インポートしたデータの波向きは,0°~350°([0,10,20, ,,, ,340,350])の36列です.しかし,極座標表示させたい場合は,0°~360°([0,10,20, ,,, ,350,360])の37列にする必要があります.</p> <pre><code class="python">#周方向(波向き[rad])のリスト作成 theta = 2 * np.pi/360*np.arange(0, 370, 10) #中心からの距離(波周波数[rad/s])のリスト作成 freq=2*np.pi*np.array([0.0445953, 0.0486315, 0.053033, 0.0578329, 0.0630672, 0.0687753, 0.075, 0.0817881, 0.0891906, 0.097263, 0.106066, 0.1156658, 0.1261345, 0.1375506, 0.15, 0.1635762, 0.1783811, 0.194526, 0.2121321,0.2313317, 0.252269, 0.2751013, 0.3000001, 0.3271524, 0.3567623]) X, Y = np.meshgrid(theta, freq) #25行37列の2次元リストを作成 ※360°は0°の値を読み込んでいる事に注意 wavedata=[[float(GA[i,int((j)%36)])for j in range(37)] for i in range(25)] </code></pre> <p>いよいよ描画.<br /> 表示させたい2次元データは最大値が4.8なので,np.linspace(0.00, 5.00, 501)のmaxを5にして,同じようにvmax=5としています.<br /> cmapはカラーマップです.色を変えたい場合は<a target="_blank" rel="nofollow noopener" href="https://matplotlib.org/3.2.1/tutorials/colors/colormaps.html">matplotlibの色サンプル</a>をご覧ください.</p> <pre><code class="python">v = np.linspace(0.00, 5.00, 501) ctf=ax2.contour(X, Y, wavedata,levels=v,cmap=cm.jet,linewidths=0.5,vmax=5) plt.colorbar(ctf, pad=0.1,orientation="vertical")#カラーバーを横にしたければorientation="horizontal" ax2.set_theta_zero_location("S")#0°の方角.北はN,南はS,西はW,東はE ax2.set_theta_direction(1)#時計回りの場合は-1,反時計周りの場合は1 ax2.set_rlabel_position(60)#距離の軸の位置.単位はdeg. plt.show() </code></pre> <p><img src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/649674/822da380-32ae-7b05-b36d-569e21cac29e.png" alt="image.png" /></p> <p>以上になります.お疲れさまでした.<br /> 誤りの指摘や質問等がありましたら,お手数ですがコメントください.<br /> よろしくお願いします.</p> kawai_mizugorou tag:crieit.net,2005:PublicArticle/16620 2021-01-19T03:06:48+09:00 2021-01-19T03:06:48+09:00 https://crieit.net/posts/f00c3157c7e766549834c6aa17923099 散布図へ色を付ける方法 <pre><code class="python">import matplotlib.pyplot as plt from scipy.stats import gaussian_kde x=(np.array([np.arange(0, 2.11,0.03 )]*len(index))).flatten() y=GA[index,19:19+71].flatten() xy=np.vstack([x,y]) z=gaussian_kde(xy)(xy) plt.figure(figsize=(5, 3), dpi=100) plt.title('Pitch') plt.scatter(x,y,c=z,s=10) plt.grid(True) plt.ylim(0,0.1) plt.xlabel(" [rad/s]") plt.ylabel("[deg^2/s]") plt.show() </code></pre> <p><a href="https://crieit.now.sh/upload_images/74eb05fa85abc8cad6d1fab5078931006005ce34415d9.png" target="_blank" rel="nofollow noopener"><img src="https://crieit.now.sh/upload_images/74eb05fa85abc8cad6d1fab5078931006005ce34415d9.png?mw=700" alt="image" /></a></p> kawai_mizugorou tag:crieit.net,2005:PublicArticle/16619 2021-01-19T03:00:41+09:00 2021-01-27T04:23:37+09:00 https://crieit.net/posts/boxplot 箱ひげ図(boxplot)の描き方 <p>箱ひげ図の描き方</p> <pre><code class="python">import seaborn as sns import matplotlib.pyplot as plt sns.set() sns.set_style('whitegrid') sns.set_palette('bone') nums=(np.arange( 0, 2.11,0.03 )*100)/100 Labels=[] for i in range(len(np.arange( 0, 2.11,0.03 ))): if i %5 ==0: Labels.append(int(i*3)/100) else: Labels.append('') fig = plt.figure(figsize=(5,3), dpi=150) ax = fig.add_subplot(1, 1, 1) ax.boxplot(GA[index,19:19+71],labels=Labels,showfliers=False) ax.set_title('Pitch') ax.set_xlabel('[rad/s]') ax.set_ylabel('[deg^2/s]') ax.set_ylim(-0.005, 0.3) ax.set_xlim(0, 71) fig.savefig('GA_Pitch_Boxplot.png') plt.show() </code></pre> <p><a href="https://crieit.now.sh/upload_images/4c6d6d98899e414aa516ddadb9f355676006802b6ffab.png" target="_blank" rel="nofollow noopener"><img src="https://crieit.now.sh/upload_images/4c6d6d98899e414aa516ddadb9f355676006802b6ffab.png?mw=700" alt="image" /></a></p> kawai_mizugorou tag:crieit.net,2005:PublicArticle/16618 2021-01-19T02:56:21+09:00 2021-01-19T03:01:08+09:00 https://crieit.net/posts/Ridgeline-plot Ridgeline plotの描き方 <p>複数の分布をグループorカテゴリ別に重ね合わせて表示する図(Ridgeline plots)の書き方.Joyplotとも言う?</p> <pre><code class="python">from scipy.stats import gaussian_kde import matplotlib.pyplot as plt plt.figure(figsize=(4, 6), dpi=150) def ridgeline(data,overlap=0.5,fill=True,labels=None,n_points=150): xx=np.linspace(np.min(np.concatenate(data)),np.max(np.concatenate(data)),n_points) curves=[] ys=[] for i,d in enumerate(data): pdf=gaussian_kde(d) y=i*(1.0-overlap) curve=pdf(xx) if fill: plt.fill_between(xx,np.ones(n_points)*y,curve+y,zorder=len(data)-i+1,alpha=0.1,color=fill) plt.plot(xx,curve+y,c='k',zorder=len(data)-i+1) plt.xlim(-1,1) #plt.ylim(10,50) if labels: plt.yticks(ys,labels) data=(FFT[index,19+10:19+51]-GA[index,19+10:19+51]).T print(np.shape(data)) ridgeline(data,overlap=0,fill='blue') </code></pre> <p><a href="https://crieit.now.sh/upload_images/22fcdf363a2232af73bed479cb4b582b6005cbbe7e255.png" target="_blank" rel="nofollow noopener"><img src="https://crieit.now.sh/upload_images/22fcdf363a2232af73bed479cb4b582b6005cbbe7e255.png?mw=700" alt="image" /></a></p> kawai_mizugorou tag:crieit.net,2005:PublicArticle/16418 2020-12-24T02:11:35+09:00 2021-02-01T21:00:27+09:00 https://crieit.net/posts/Matplotlib Matplotlibの頻繁に使うコード <p>折れ線グラフや散布図を描くコード</p> <pre><code class="python">fig=plt.figure(figsize=(8, 6), dpi=150) #fig=plt.figure(figsize=(4, 4), dpi=150) plt.scatter(eval_preds[:,0],test_ydata[:,0],s=20, alpha=0.10) plt.plot(list_train_loss, 'k-', label='Training error',alpha=0.8,color='blue') plt.ylim(0,0.2) plt.xlim(0,0.2) plt.xlabel('Epoch') plt.ylabel('MSE') plt.title('Learning curve') plt.tick_params(labelsize=15) plt.locator_params(axis='y',nbins=8) plt.locator_params(axis='x',nbins=8) plt.gca().yaxis.set_major_formatter(plt.FormatStrFormatter('%.0f')) plt.gca().xaxis.set_major_formatter(plt.FormatStrFormatter('%.0f')) plt.legend(['Train','Test'], loc='upper right') plt.grid() fig.savefig('画像/結果.png') plt.show() </code></pre> <p>下の画像は上のコードと対応してませんが,参考程度に<br /> <a href="https://crieit.now.sh/upload_images/e85354f3854274e833c09f024fb5d8e65fe37ae699d60.png" target="_blank" rel="nofollow noopener"><img src="https://crieit.now.sh/upload_images/e85354f3854274e833c09f024fb5d8e65fe37ae699d60.png?mw=700" alt="image" /></a></p> <p><a href="https://crieit.now.sh/upload_images/c5a917eb692287f0e874b18811319d1d5fe37af784db7.png" target="_blank" rel="nofollow noopener"><img src="https://crieit.now.sh/upload_images/c5a917eb692287f0e874b18811319d1d5fe37af784db7.png?mw=700" alt="image" /></a></p> kawai_mizugorou