'log'と 'symlog'の違いは何ですか?
What Is Difference Betweenlogandsymlog
解決:
私はついにそれらの違いを理解するためにいくつかの実験をする時間を見つけました。これが私が発見したものです:
ログでは正の値のみが許可され、負の値の処理方法を選択できます(
マスクまたは
クリップ)。
symlogは 対称ログ 、および正と負の値を許可します。
symlogを使用すると、プロット内でゼロ付近の範囲を設定でき、対数ではなく線形になります。
グラフィックと例を使用すると、すべてがはるかに理解しやすくなると思うので、それらを試してみましょう。
import numpy from matplotlib import pyplot#インタラクティブモードを有効にするpyplot.ion()#グリッド線を描画するpyplot.grid(True)#-50から50までの数値、0.1をステップとしてxdomain = numpy.arange(-50,50、0.1 )#単純な線形関数をプロットします 'f(x)= x'pyplot.plot(xdomain、xdomain)#プロット' sin(x) 'pyplot.plot(xdomain、numpy.sin(xdomain))#' linear 'はデフォルトモードなので、この次の行は冗長です:pyplot.xscale( 'linear')
#負の値をどのように扱うか? # 'mask'は負の値を無効として扱います# 'mask'がデフォルトであるため、次の2行は同等ですpyplot.xscale( 'log')pyplot.xscale( 'log'、nonposx = 'mask')
# 'clip'は、すべての負の値を非常に小さい正の値にマップしますpyplot.xscale( 'log'、nonposx = 'clip')
# 'symlog'スケーリングは、ただし、負の値を適切に処理しますpyplot.xscale( 'symlog')
#そして、ゼロの周りに線形範囲を設定することもできますpyplot.xscale( 'symlog'、linthreshx = 20)
完全を期すために、次のコードを使用して各図を保存しました。
#デフォルトのdpiは80ですpyplot.savefig( 'matplotlib_xscale_linear.png'、dpi = 50、bbox_inches = 'tight')次を使用してフィギュアのサイズを変更できることを忘れないでください。
fig = pyplot.gcf()fig.set_size_inches([4.、3。])#デフォルトサイズ:[8.、6。](私が自分の質問に答えているかどうかわからない場合は、これを読んでください)
単純 はログに似ていますが、プロットがゼロ付近で無限大になるのを避けるために、プロットが線形であるゼロに近い値の範囲を定義できます。
http://matplotlib.sourceforge.net/api/axes_api.html#matplotlib.axes.Axes.set_xscaleから
両対数グラフでは、ゼロ値を持つことはできません。ゼロに近づく値がある場合、「log(ゼロに近づく)」を取ると、グラフの下部から下に向かって(無限に下に)スパイクします。 '負の無限大に近づく'を取得します。
symlogは、ロググラフが必要で、値がゼロに向かって、またはゼロに下がる場合があるが、それでもグラフ上に意味のある方法で表示できるようにしたい場合に役立ちます。 symlogが必要な場合は、ご存知でしょう。
symlogが必要な場合の動作の例を次に示します。
スケーリングされていない初期プロット。 x〜0にいくつのドットが集まっているかに注目してください
ax = sns.scatterplot(x = 'Score'、y = 'Total Amount Deposited'、data = df、hue = 'Predicted Category')[ '
スケーリングされたプロットをログに記録します。すべてが崩壊した。
ax = sns.scatterplot(x = 'Score'、y = 'Total Amount Deposited'、data = df、hue = 'Predicted Category')ax.set_xscale( 'log')ax.set_yscale( 'log')ax.set (xlabel = 'スコア、ログ'、ylabel = 'デポジットされた合計金額、ログ') '
なぜ崩壊したのですか? x軸のいくつかの値が0に非常に近いか等しいためです。
Symlogスケーリングされたプロット。すべてが本来あるべき姿です。
ax = sns.scatterplot(x = 'Score'、y = 'Total Amount Deposited'、data = df、hue = 'Predicted Category')ax.set_xscale( 'symlog')ax.set_yscale( 'symlog')ax.set (xlabel = 'スコア、symlog'、ylabel = 'デポジットされた合計金額、symlog')