質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
Matplotlib

MatplotlibはPythonのおよび、NumPy用のグラフ描画ライブラリです。多くの場合、IPythonと連携して使われます。

Python 3.x

Python 3はPythonプログラミング言語の最新バージョンであり、2008年12月3日にリリースされました。

Q&A

0回答

861閲覧

Matplotlibを用いた極値統計プロットの方法

makina02

総合スコア2

Matplotlib

MatplotlibはPythonのおよび、NumPy用のグラフ描画ライブラリです。多くの場合、IPythonと連携して使われます。

Python 3.x

Python 3はPythonプログラミング言語の最新バージョンであり、2008年12月3日にリリースされました。

0グッド

0クリップ

投稿2022/06/13 04:42

編集2022/06/13 09:15

前提

極値統計解析を行っており、
得られたデータを極値統計グラフにプロットしたいです。
しかし、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などと調べてみたのですが、どうもうまくいきません。
すいませんがどなたかご回答いただけないでしょうか。
不足有りましたら情報追記致します。

よろしくお願いします。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだ回答がついていません

会員登録して回答してみよう

アカウントをお持ちの方は

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問