x値の大きな範囲をカバーするデータを持つデータの一部をKDEでプロットするとします。したがって、私はx軸に対数スケールを使用したいと思います。プロッティングのために私はseabornとPlotting 2D Kernel Density Estimation with Pythonからの解決法を使用していました。どちらも一度xscaleを対数に設定すると失敗します。私がx-データの対数をあらかじめ取っておけば、ティックとチクラベルは線形であり、実際の値の対数はラベルであるという点を除いて、すべてが上手く見えます。私はちょうどMatplotlibの対数xデータでKDEをプロットする
ax.set_xscale('log')
を使用するときだけ間違って検索し、(小目盛りを含む)軸ラベルに近いものではありません
labels = np.array(ax.get_xticks().tolist(), dtype=np.float64)
new_labels = [r'$10^{%.1f}$' % (labels[i]) for i in range(len(labels))]
ax.set_xticklabels(new_labels)
が、私の目には:私は手動でのようなものを使用して目盛りを変更することができます
対数型のx-データを使ってKDEをプロットする簡単な方法はありますか?あるいは、データのスケーリングを変更せずにチックまたはラベルスケールを変更するだけで、xの対数値をプロットし、後でラベルのスケーリングを変更することができますか?
編集:私はこのようなルックスを作成したい プロット: 2つの右の列は、見えるようになっているものです。ここでは、すでに適用されている対数を使ってxデータを使用しました。私はx軸のラベルが好きではありません。
左の列はプロットを表示し、元のデータは、KDEや他のすべてのプロットに使用され、その後、スケールが何らかの理由でKDEを
ax.set_xscale('log')
を使用して変更されたときに、似ていませんそれは見ることになっています。これはまた、対数データが使用されている場合には正常に見えるので、誤ったデータの結果でもありません。
編集2: コードの実施例は、ax[1]
プロットは私(X軸が反転される)のために正しく表示されない
import numpy as np
import matplotlib.pyplot as plt
import seaborn as sns
data = np.random.multivariate_normal((0, 0), [[0.8, 0.05], [0.05, 0.7]], 100)
x = np.power(10, data[:, 0])
y = data[:, 1]
fig, ax = plt.subplots(2, 1)
sns.kdeplot(data=np.log10(x), data2=y, ax=ax[0])
sns.kdeplot(data=x, data2=y, ax=ax[1])
ax[1].set_xscale('log')
plt.show()
であるが、一般的な挙動は場合と同じです上述した。私はこの問題がkdeの帯域幅にあると考えています。これはおそらく対数的なx-データを説明するはずです。
を使用することができます。 'ax.set_xscale( 'log')'のようなものが動作するはずなので、ログスケールでKDEをプロットするという問題はありません。 – ImportanceOfBeingErnest
問題を再現するために、いくつかのデータサンプルを提供できますか? – Grigoriy
私はいくつかのさらなる説明を追加し、再現のためにいくつかのサンプルデータを用意します。 –