与热图配对(可能是对数)?

Eri*_*got 8 python matplotlib pandas seaborn

如何在Python中创建一对图,如下所示: 在此输入图像描述 但是用热图代替点(或者代替"hex bin"图)?有可能改为显示对数热图计数将是一个额外的好处.(对角线上的直方图非常精细.)

通过"热图",我指的是计数的2D直方图,显示为SeabornWikipedia的热图:

在此输入图像描述

使用Pandas,seaborn或matplotlib会很棒(也许是plot.ly).

我尝试了下面的天真变化,但无济于事:

pairplot = sns.PairGrid(data)  # sns = seaborn
pairplot.map_offdiag(sns.kdeplot)  # Off-diagnoal heat map wanted instead!
pairplot.map_diag(plt.hist)  # plt = matplotlib.pyplot
Run Code Online (Sandbox Code Playgroud)

(上面使用了核心密度估算器,我不想要;也可以用Pandas获得十六进制bin网格,但我正在寻找"方形"2D直方图而Matplotlib hist2d()不起作用).

mwa*_*kom 8

你的答案的关键是matplotlib函数plt.hist2d,它使用色标("热图")绘制矩形区间内的计数.它的API几乎兼容PairGrid,但并不完全,因为它不知道如何处理color=kwarg.通过编写瘦包装函数可以轻松解决这个问题.此外,如果您希望colormap以对数方式映射计数,则可以使用matplotlib轻松完成LogNorm:

import seaborn as sns
import matplotlib.pyplot as plt
from matplotlib.colors import LogNorm
sns.set_style("white")
iris = sns.load_dataset("iris")    

g = sns.PairGrid(iris)
g.map_diag(plt.hist, bins=20)

def pairgrid_heatmap(x, y, **kws):
    cmap = sns.light_palette(kws.pop("color"), as_cmap=True)
    plt.hist2d(x, y, cmap=cmap, cmin=1, **kws)

g.map_offdiag(pairgrid_heatmap, bins=20, norm=LogNorm())
Run Code Online (Sandbox Code Playgroud)

在此输入图像描述


Kon*_*tov 6

制备:

%matplotlib inline #for jupyter notebook

import matplotlib.pyplot as plt
import seaborn as sns
iris = sns.load_dataset("iris")
Run Code Online (Sandbox Code Playgroud)

新答案:

g = sns.PairGrid(iris)
g = g.map_upper(plt.scatter,marker='+')
g = g.map_lower(sns.kdeplot, cmap="hot",shade=True)
g = g.map_diag(sns.kdeplot, shade=True)
sns.plt.show()
Run Code Online (Sandbox Code Playgroud)

在此输入图像描述

回答:

g = sns.PairGrid(iris)
g = g.map_upper(plt.scatter)
g = g.map_lower(sns.kdeplot, cmap="hot",shade=True)
g = g.map_diag(plt.hist)
sns.plt.show()
Run Code Online (Sandbox Code Playgroud)

在此输入图像描述