我尝试使用以下代码创建一个seaborn联合图:
import seaborn as sns
import pandas as pd
import numpy as np
import matplotlib.pylab as plt
testdata = pd.DataFrame(np.array([[100, 1, 3], [5, 2, 6], [25, 3, -4]]), index=['A', 'B', 'C'], columns=['counts', 'X', 'Y'])
counts = testdata['counts'].values
sns.jointplot('X', 'Y', data=testdata, kind='kde', joint_kws={'weights':counts})
plt.savefig('test.png')
Run Code Online (Sandbox Code Playgroud)
现在joint_kws不会引发错误,但是在图中可以看到权重确定不被考虑:

我也尝试过JointGrid,将权重传递给边缘分布:
g = sns.JointGrid('X', 'Y', data=testdata)
x = testdata['X'].values
y = testdata['Y'].values
g.ax_marg_x.hist(x, bins=np.arange(-10,10), weights=counts)
g.ax_marg_y.hist(y, bins=np.arange(-10,10), weights=counts, orientation='horizontal')
g.plot_marginals(sns.distplot)
g.plot_join(sns.kdeplot, joint_kws={'weights':counts})
plt.savefig('test.png')
Run Code Online (Sandbox Code Playgroud)
但这仅适用于边际分布,而联合图仍未加权:

有谁知道如何做到这一点?
Pau*_*l H -1
你真的很接近。
需要记住的是,连接图执行以下操作(大量释义):
def jointplot(x, y, data=None, ..., joint_kws):
g = sns.JointGrid(...)
g.plot_joint(..., **joint_kws)
Run Code Online (Sandbox Code Playgroud)
所以当你调用g.plot_joint自己时,只需给它提供正常的 kwargs 即可:
import numpy as np
import matplotlib.pyplot as plt
import pandas as pd
import seaborn as sns
testdata = pd.DataFrame(
np.array([[100, 1, 3], [5, 2, 6], [25, 3, -4]]),
index=['A', 'B', 'C'],
columns=['counts', 'X', 'Y']
)
counts = testdata['counts'].values
g = sns.JointGrid('X', 'Y', data=testdata)
g.plot_marginals(sns.distplot)
g.plot_joint(sns.kdeplot, weights=counts)
Run Code Online (Sandbox Code Playgroud)

现在我不确定这看起来是否正确,但它没有呕吐,所以这是值得的。