この質問に回答したJoe Kingtonの説明のとおり、How can I make a scatter plot colored by density in matplotlibのように、密度で色分けされた散布図を作成しました。しかし、私のデータが複雑に分布しているため、密度の計算に使用するパラメータを変更したいと考えています。ここで は私に似て、いくつかの偽のデータとの結果である: 私はので最初のプロットを好きではない: プロットの左側の部分は次のようになりますように、私はgaussian_kdeの密度の計算を校正したいと思いますポイントのグループは隣接するポイントのグループの密度に影響し、グループ内の分布を分析できなくなります。つまり、8つのグループのそれぞれがまったく同じ分布を持っていても、それはグラフ上には見えません。matplotlibの密度で色分けされた散布図のgaussian_kdeのパラメータを変更するには
私はcovariance_factorを修正しようとしました(x上の密度の2次元プロットのように)。しかし、複数の次元配列でgaussian_kdeを使うと、 "scipy.stats.kde"ではなくnumpy.ndarrayが返されます。 gaussian_kde "オブジェクトである。さらに、私はcovariance_factorを変更することでそれが実現するかどうかも分かりません。
import numpy as np
import matplotlib.pyplot as plt
from scipy.stats import gaussian_kde
# Generate fake data
a = np.random.normal(size=1000)
b = np.random.normal(size=1000)
# Data for the first image
x = np.concatenate((a+10,a+10,a+20,a+20,a+30,a+30,a+40,a+40,a+80))
y = np.concatenate((b+10,b-10,b+10,b-10,b+10,b-10,b+10,b-10,b*4))
# Data for the second image
#x = np.concatenate((a+10,a+10,a+20,a+20,a+30,a+30,a+40,a+40))
#y = np.concatenate((b+10,b-10,b+10,b-10,b+10,b-10,b+10,b-10))
# Calculate the point density
xy = np.vstack([x,y])
z = gaussian_kde(xy)(xy)
# My unsuccesfull try to modify covariance which would work in 1D with "z = gaussian_kde(x)"
#z.covariance_factor = lambda : 0.01
#z._compute_covariance()
# Sort the points by density, so that the densest points are plotted last
idx = z.argsort()
x, y, z = x[idx], y[idx], z[idx]
fig, ax = plt.subplots()
ax.scatter(x, y, c=z, s=50, edgecolor='')
plt.show()
ソリューションは、他の密度の計算機を使用することができ、私は気にしない:
は、ここに私のダミーのコードです。 目標は、上に示したような濃度プロットを作成することです。ここでは、密度パラメータで再生できます。
私はSeabornを見ていました
をあなたが最初のプロットと間違って何より明確に説明してもらえますか?私の推測では、より滑らかでない密度の推定値を望むということです。これは、 'bw_method ='パラメータに異なるスカラー値を渡すなど、ガウスカーネルの帯域幅を変えることである程度制御できます。しかし、KDEは一般的に単峰性のディストリビューションに最適です。あなたのような複雑なマルチモーダルディストリビューションでは、オーバースムージングはやや避けられません。 –
1)質問を編集しました。 2)私は、bw_methodパラメータを変更する方法の例に興味があります。 3)配布のアドバイスをありがとう。 – Gab