seaborn jointplot 按密度颜色
seaborn jointplot color by density
我正在为一些具有数百万个数据点的数据制作二维直方图。 matplotlib.hist2d(x,y,bins,norm=LogNorm())
效果很好,在大约 5 秒内生成了一个图,但我喜欢 seaborn.jointplot()
的边际直方图。如何使用所附 matplotlib.hist2d()
图中点的对数密度为 seaborn.jointplot()
中的点着色?使用 KDE 花费的时间太长(大约一分钟后我就放弃了),而且我有很多图形要创建。因此 'get' 颜色的时间是一个因素。或者,如何将边际直方图添加到 matplotlib.hist2d()
?
plt.hist2d(x,y,100,norm=LogNorm(),cmap='jet')
sns.jointplot(x=x, y=y)
在 seaborn
中可能还有另一种直接获取颜色图的方法。我还没有找到。这是一个 hacky 示例解决方案,用于使用一些随机数据完成工作。至于你的第二个问题,我建议post一个新问题。
诀窍是首先使用 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='hot_r', n_levels=60, fill=True)
这是最终的图和代码。感谢@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)
我正在为一些具有数百万个数据点的数据制作二维直方图。 matplotlib.hist2d(x,y,bins,norm=LogNorm())
效果很好,在大约 5 秒内生成了一个图,但我喜欢 seaborn.jointplot()
的边际直方图。如何使用所附 matplotlib.hist2d()
图中点的对数密度为 seaborn.jointplot()
中的点着色?使用 KDE 花费的时间太长(大约一分钟后我就放弃了),而且我有很多图形要创建。因此 'get' 颜色的时间是一个因素。或者,如何将边际直方图添加到 matplotlib.hist2d()
?
plt.hist2d(x,y,100,norm=LogNorm(),cmap='jet')
sns.jointplot(x=x, y=y)
在 seaborn
中可能还有另一种直接获取颜色图的方法。我还没有找到。这是一个 hacky 示例解决方案,用于使用一些随机数据完成工作。至于你的第二个问题,我建议post一个新问题。
诀窍是首先使用 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='hot_r', n_levels=60, fill=True)
这是最终的图和代码。感谢@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)