x- 값이 큰 데이터를 포함하는 일부 데이터에 대해 KDE를 플롯하려고합니다. 따라서 x 축에 로그 스케일을 사용하고 싶습니다. 음모를 꾸미기 위해 나는 시보 른과 Plotting 2D Kernel Density Estimation with Python의 해답을 사용했습니다. 일단 xscale을 대수로 설정하면 실패합니다. 내 x- 데이터의 로그를 미리 취하면 틱과 ticlabels이 라벨과 같은 실제 값의 로그와 선형 적이라는 것을 제외하고는 모든 것이 잘 보입니다. 나는 수동으로 같은 것을 사용하여 틱을 변경할 수 있습니다 : Matplotlib의 대수 x- 데이터로 KDE 플로팅
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)
하지만 난 그냥 사용합니다 (마이너 틱 포함) 축 레이블에 가까운 것도 그냥 잘못 보이는 않고 내 눈에
ax.set_xscale('log')
대수 x- 데이터로 KDE를 플롯하는 쉬운 방법이 있습니까? 또는 데이터 스케일링을 변경하지 않고도 틱 또는 라벨 스케일을 변경하여 x의 로그 값을 플롯하고 이후에 라벨의 스케일을 변경할 수 있습니까?
편집 : 이 같은 모습을 만들려면 줄거리 : 두 바로 열이 같이하도록되어 무엇인가. 여기서 로그를 이미 적용한 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의 대역폭과 관련이 있다고 생각합니다. kde의 대역폭은 로그 x- 데이터를 고려해야합니다.
실제 문제를 분명히 진 것을 잊었을 것 같습니다. 'ax.set_xscale ('log')'와 같은 것이 작동해야하기 때문에, KDE를 로그 스케일에 플로팅하는 문제는 보이지 않습니다. – ImportanceOfBeingErnest
문제를 재현하기 위해 몇 가지 데이터 샘플을 제공 할 수 있습니까? – Grigoriy
몇 가지 추가 설명을 추가했으며 재생산을 위해 샘플 데이터를 준비 할 것입니다. –