我想在Seaborn Grid中获取一个hexbin图。我有以下代码,
# Works in Jupyter with Python 2 Kernel.
%matplotlib inline
import seaborn as sns
import matplotlib as mpl
import matplotlib.pyplot as plt
tips = sns.load_dataset("tips")
# Borrowed from http://stackoverflow.com/a/31385996/4099925
def hexbin(x, y, color, **kwargs):
cmap = sns.light_palette(color, as_cmap=True)
plt.hexbin(x, y, gridsize=15, cmap=cmap, extent=[min(x), max(x), min(y), max(y)], **kwargs)
g = sns.PairGrid(tips, hue='sex')
g.map_diag(plt.hist)
g.map_lower(sns.stripplot, jitter=True, alpha=0.5)
g.map_upper(hexbin)
如何修复hexbin图,使它们覆盖图形的整个表面,而不仅仅是显示的绘图区域的一个子集?
答案 0 :(得分:3)
你在这里尝试做的事情至少有三个问题。
stripplot用于至少有一个轴是分类的数据。在这种情况下,情况并非如此。 Seaborn猜测x轴是分类的,它会扰乱子图的x轴。来自docs for stripplot:
绘制一个散点图,其中一个变量是分类的。
在我建议的代码中,我将其更改为简单的散点图。
在彼此顶部绘制两个hexbin-plot将仅显示后者。我在hexbin参数中添加了一些.focusBox, .subFolderBox {
width: 100px;
}
,但结果远非漂亮。
代码中的范围参数将每个性别的alpha=0.5
和x
的六边形图调整为一次。但两个hexbin图的大小必须相等,所以他们应该使用整个系列的min / max而不是两个性别。为了达到这个目的,我将所有系列的最小值和最大值传递给hexbin函数,然后可以选择和使用相关函数。
以下是我提出的建议:
y