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

时间:2017-05-11 19:44:19

标签: python pandas matplotlib seaborn

如何在Python中创建一对图,如下所示: enter image description here 但是使用热图代替点(或者代替“hex bin”图)?有可能改为显示对数热图计数将是一个额外的好处。 (对角线上的直方图非常精细。)

“热图”是指计数的二维直方图,显示为Seaborn'sWikipedia's热图:

enter image description here

使用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

(上面使用的是核心密度估算器,我不想要;也可以用Pandas获得十六进制bin网格,但我正在寻找一个“方形”2D直方图和Matplotlib的hist2d()没有'工作)。

2 个答案:

答案 0 :(得分:8)

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

enter image description here

答案 1 :(得分:6)

的制备:将

%matplotlib inline #for jupyter notebook

import matplotlib.pyplot as plt
import seaborn as sns
iris = sns.load_dataset("iris")

新答案:

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()

enter image description here

答案:

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()

enter image description here