Python seaborn jointplot颜色(按密度)

Python seaborn jointplot颜色(按密度),python,matplotlib,seaborn,histogram2d,Python,Matplotlib,Seaborn,Histogram2d,我正在为一些有数百万个数据点的数据制作二维直方图matplotlib.hist2d(x,y,bins,norm=LogNorm())运行良好,大约在5秒钟内生成一个绘图,但我喜欢seaborn.jointplot()的边缘直方图。如何使用所附matplotlib.hist2d()图中点的对数密度对seaborn.jointplot()中的点进行着色?使用KDE花费的时间太长(大约一分钟后我就放弃了),我有很多数字要创建。因此,“获得”颜色的时间是一个因素。或者,如何将边缘直方图添加到matplo

我正在为一些有数百万个数据点的数据制作二维直方图
matplotlib.hist2d(x,y,bins,norm=LogNorm())
运行良好,大约在5秒钟内生成一个绘图,但我喜欢
seaborn.jointplot()的边缘直方图。如何使用所附
matplotlib.hist2d()
图中点的对数密度对
seaborn.jointplot()中的点进行着色?使用KDE花费的时间太长(大约一分钟后我就放弃了),我有很多数字要创建。因此,“获得”颜色的时间是一个因素。或者,如何将边缘直方图添加到
matplotlib.hist2d()

plt.hist2d(x,y,100,norm=LogNorm(),cmap='jet')

sns.jointplot(x=x,y=y)


seaborn
中,可能还有另一种直接获取彩色地图的方法。我还没找到。下面是一个黑客示例解决方案,可以使用一些随机数据来完成任务。至于你的第二个问题,我建议你提出一个新问题

诀窍是首先使用seaborn创建一个
jointplot
,然后隐藏2d散点并使用
plt.hist2d

import seaborn as sns
import numpy as np
import matplotlib.pyplot as plt
import matplotlib.cm as cm

# some random data
x = np.random.normal(size=100000)
y = x * 3.5 + np.random.normal(size=100000)

ax1 = sns.jointplot(x=x, y=y)
ax1.ax_joint.cla()
plt.sca(ax1.ax_joint)

plt.hist2d(x, y, bins=(100, 100), cmap=cm.jet);

这里有一个替代方案,基本上相同,但在seaborn中仍然存在:

import seaborn as sns
import numpy as np

x = np.random.normal(size=100)
y = x * 3.5 + np.random.normal(size=100)

sns.jointplot(x=x, y=y, kind='kde', cmap='jet', n_levels=60)

这是最后的图和代码。感谢@Bazingaa的帮助

def makesweetgraph(x=None, y=None, cmap='jet', ylab=None, xlab=None, bins=100, sets=sets, figsize=(5,4), snsbins=60):
    set1,set2 = sets
    ax1 = sns.jointplot(x=x, y=y,marginal_kws=dict(bins=snsbins))
    ax1.fig.set_size_inches(figsize[0], figsize[1])
    ax1.ax_joint.cla()
    plt.sca(ax1.ax_joint)
    plt.hist2d(x,y,bins,norm=LogNorm(),cmap=cmap)
    plt.title('%s vs %s (%.4f%% of loci)\n%s and %s' % (xlab,ylab,(len(x)/numsnps)*100,set1,set2),y=1.2,x=0.6)
    plt.ylabel(ylab,fontsize=12)
    plt.xlabel(xlab,fontsize=12)
    cbar_ax = ax1.fig.add_axes([1, 0.1, .03, .7])
    cb = plt.colorbar(cax=cbar_ax)
    cb.set_label(r'$\log_{10}$ density of points',fontsize=13)

@BML:很高兴为您提供帮助:)不幸的是,kde速度太慢,无法获得数百万分,尤其是在有几十个数字需要计算的情况下@Bazingaa的解决方案是最好的,请看下面我的评论这不是堆栈溢出的工作原理。你不需要向别人寻求帮助,只需要得到答案,然后简单地复制它,然后自己把它作为答案发布。如果是这样的话,你应该自己找到答案。不是你不接受我的回答,而是如果你继续这样做,人们不会再帮助你了。好吧,这是一些非常严厉的话。我标记了你的评论。SO的主持人将很快阅读它