さて、私がこれまでに把握したことで質問に答えます。
片対数に直線をプロットするには、主に 2 つの方法があります。x 値のリストがあり、直線をプロットする対応する y 値を取得したい場合は、numpy.exp()
各 x 値を呼び出すだけです。
import matplotlib.pyplot as plt
import numpy as np
plt.gca().set_yscale('log')
x = np.arange(0, 51, 10)
y = np.exp(x)
plt.plot(x, y, 'k-')
plt.show()
ここにいくつかの証拠があります。
既知の y 値と未知の x 値を使用して直線をプロットする場合は、その逆を行います。
import matplotlib.pyplot as plt
import numpy as np
plt.gca().set_yscale('log')
y = np.arange(0, 1001, 100)
x = np.log(y)
plt.plot(x, y, 'k-')
plt.show()
これがより多くの証拠です。
さて、スキュー t のコンテキストでは、やるべきことがもっとあります。Skew-t を生成するときは、既知の y 値と既知の x 値の両方から作業する必要があります。温度 (x 値) とレベル (y 値) を取り、適切に歪んだ x 値を返す関数の例を次に示します。
def get_skewed_x(level, temp):
base_log = (-30 * np.log(1000))
top_log = (-30 * np.log(level))
diff = base_log - temp
x = top_log - diff
return x
この関数は、データをプロットするレベルと温度値を受け入れます。
この関数はかなり複雑に見えますが、これは、y 値に対して np.log() を呼び出して片対数に直線を作成すると、x 値が必要な場所から大きくずれてしまうためです。したがって、値が実際にある場所とあるべき場所の違いを見つける必要があります。データをプロットするレベルに関係なく、最下位レベルでプロットする必要がある場所を知っているため、上位レベルに適用する前に最下位レベルで違いを見つける必要があります。
「オフセット」がわかったら、すべての歪んだ x 値の差を補正するだけです。これらの値が -30 倍される理由は、アプリケーション固有です。この数は、プロットの y 制限と x 制限に基づいて変更する必要があります。
np.log(1000)
プロットによっては、「1000」も変更する必要がある場合があります。これは、skew-t プロットの最低レベル (最高の y 値) である必要があります。
ポイントは、データをプロットする温度とデータをプロットするレベルがわかっている場合、この関数は値を適切に歪めます (もちろん、特定のプロットに対して -30 が調整されている場合)。
関数の動作を確認するために、レベル 500 で温度 10 のデータ ポイントをプロットすると、次のようになります。
get_skewed_x(500, 10)
青い点は、データポイントがプロットされる場所を示しています。
おそらくもっとエレガントな解決策があるでしょうが、これは私が今持っている最高のものです。