前提
極値統計解析を行っており、
得られたデータを極値統計グラフにプロットしたいです。
しかし、Y軸が上手く作成できずに苦労しています。
実現したいこと
累積確率F[%]に対して、基準化変数Y, 再帰期間Tは一意に決まります。
ここで、Y=-ln[-ln(F[%])], T=1/(1-F[%])と定義されます。
これらF[%], Y, Tを全てY軸上にとり、かつ一意に決まる値をY軸の同じ高さとしたいです。
※添付画像のようなグラフです。
F=99.9のとき、T=1000, Y=6.907255…と一意に決まり、これらがY軸上で同じ高さとなっています。
発生している問題・エラーメッセージ
Yを基準とした時に、F[%], TがY軸上の同じ高さと出来ません。
コードは下記に示す通りです。
結果は、添付画像に示す通りyの値に対しF[%]とTの位置が一致せず、
3つ別々のグラフが表示されてしまいます。
(この3本のグラフが、全て同じ直線となるようF[%]とTのY軸を調整したいです。
該当のソースコード
Python
1#上にdf_areaというデータフレームにて、プロットしたいデータは定義済みです。 2func_V = np.polyfit(df_area['√area V'], df_area['Y_V'], 1) 3print(func_V) #√areaとYを最小二乗法で直線近似しています 4 5df_fit_V = pd.DataFrame() #Y軸用の空のデータフレームを作成 6Fit_F = pd.Series(np.arange(1, 1000, 1)/10) #F[%]を0.1-99.9%まで 7Fit_T = 1/(1-(Fit_F/100)) #T=1/(1-F[%]) 8Fit_Y = -np.log(-np.log(Fit_F/100)) Y=-ln[-ln(F[%])] 9Fit_sqrt_area = (Fit_Y-func_V[1])/func_V[0] 10#df_fit_Vで定義したデータフレームにおけるYの値に対し、Xがどのような値を取るか定義 11 12df_fit_V = pd.concat([df_fit_V, Fit_F, Fit_T, Fit_Y, Fit_sqrt_area], axis=1) 13#Seriesをデータフレームに格納 14df_fit_V.set_axis(['Fit_F', 'Fit_T', 'Fit_Y', 'Fit_sqrt_area'], axis = 'columns', inplace=True) 15print(df_fit_V) 16 17fig, ax1 = plt.subplots() 18ax2=ax1.twinx() 19ax3=ax1.twinx() 20 21ax1.scatter(x = df_area['√area V'], y = df_area['Y_V'], c='w', marker='o', linewidths=1, ec="k") 22ax1.plot(Fit_sqrt_area, Fit_Y) 23ax1.set_xlabel('$√area_{max}$ [µm]', fontsize=14, labelpad=5) 24ax1.set_ylabel('y=-ln[-ln(F)]', fontsize=14, labelpad=5) 25ax2.set_ylabel('F[%]', fontsize=14, labelpad=5, color='green') 26ax2.plot(Fit_sqrt_area, Fit_F, color='forestgreen') 27ax3.set_ylabel('T', fontsize=14, labelpad=5, color='blue') 28ax3.plot(Fit_sqrt_area, Fit_T, color='royalblue') 29 30rspine = ax3.spines['right'] 31rspine.set_position(('axes', 1.15)) 32 33#以下略
試したこと
グラフの幅を対数にしてみたり、
正規確率紙プロット pythonなどと調べてみたのですが、どうもうまくいきません。
すいませんがどなたかご回答いただけないでしょうか。
不足有りましたら情報追記致します。
よろしくお願いします。
あなたの回答
tips
プレビュー