Seaborn成对矩阵的六边形联合分布图

5

我正在尝试生成一个矩阵,用来比较分布情况(类似于这个)。由于有许多点,我想使用六角形bin图来减少时间和绘图复杂性。

import seaborn as sns
import matplotlib.pyplot as plt


tips = sns.load_dataset("tips")

g = sns.FacetGrid(tips, col="time", row="sex")
g.map(sns.jointplot, "total_bill", "tip", kind="hex")
plt.show()

然而,它并没有创建画布矩阵,而是在各个窗口中独立地创建了几个图。

我还考虑使用 seaborn.pairplot 来生成这个图,但是我无法将 "hex" 作为 kind 的值传递。


是的,我也看到了,使用seaborn 0.7.1。我不确定为什么FacetGrid不能与jointplot一起使用。 - nickos556
我也遇到了同样的问题,不确定是不是我的操作有误——它会先创建一个空的图像矩阵,然后按顺序绘制我的正常联合分布图。 - cgseller
这是因为jointplot是一个图形级别的函数,它在自己的图形中绘制,而不是在给定轴上绘制的函数。 在下面的答案中,mwaskom创建了另一个图形级别的函数(FacetGrid),并将一个在先前创建的轴上绘制的函数映射到其轴上。 - afrendeiro
1个回答

7
请看这篇关于在 `FacetGrid` 中使用自定义函数的教程中的最后一个例子,我在这里复制一下:链接
def hexbin(x, y, color, **kwargs):
    cmap = sns.light_palette(color, as_cmap=True)
    plt.hexbin(x, y, gridsize=15, cmap=cmap, **kwargs)

g = sns.FacetGrid(tips, hue="time", col="time", size=4)
g.map(hexbin, "total_bill", "tip", extent=[0, 50, 0, 10])

enter image description here


这仍然无法解释为什么传递col作为色调时会观察到相反的行为。 - gented

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接