Czy istnieje wykres matplotlib lub seaborn, którego mogłem użyć z g.map_lower lub g.map_upper, aby uzyskać współczynnik korelacji wyświetlany dla każdego dwuwymiarowego wykresu, jak pokazano poniżej? Narzędzie plt.text zostało ręcznie odwzorowane, aby uzyskać poniższy przykład, który jest żmudnym procesem.Współczynnik korelacji Seaborn na PairGrid
9
A
Odpowiedz
18
Możesz przekazać dowolną funkcję z metodami map_*
tak długo, jak wynika kilka zasad: 1) powinna narysowania na „bieżący” osi, 2) powinno zająć dwa wektory jako pozycyjnych argumentów i 3) powinien zaakceptować argument słowa kluczowego color
(opcjonalnie używając go, jeśli chcesz być kompatybilny z opcją hue
).
Więc w twoim przypadku po prostu trzeba zdefiniować trochę corrfunc
funkcję, a następnie map go w poprzek osi chcesz mieć adnotacją:
import numpy as np
from scipy import stats
import pandas as pd
import seaborn as sns
import matplotlib.pyplot as plt
sns.set(style="white")
mean = np.zeros(3)
cov = np.random.uniform(.2, .4, (3, 3))
cov += cov.T
cov[np.diag_indices(3)] = 1
data = np.random.multivariate_normal(mean, cov, 100)
df = pd.DataFrame(data, columns=["X", "Y", "Z"])
def corrfunc(x, y, **kws):
r, _ = stats.pearsonr(x, y)
ax = plt.gca()
ax.annotate("r = {:.2f}".format(r),
xy=(.1, .9), xycoords=ax.transAxes)
g = sns.PairGrid(df, palette=["red"])
g.map_upper(plt.scatter, s=10)
g.map_diag(sns.distplot, kde=False)
g.map_lower(sns.kdeplot, cmap="Blues_d")
g.map_lower(corrfunc)
To działało idealnie dziękuję! – wblack