Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/329.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 用热图对绘图(可能是对数图)?_Python_Pandas_Matplotlib_Seaborn - Fatal编程技术网

Python 用热图对绘图(可能是对数图)?

Python 用热图对绘图(可能是对数图)?,python,pandas,matplotlib,seaborn,Python,Pandas,Matplotlib,Seaborn,如何在Python中创建配对图,如下所示: 但是用热图代替点(或者代替“六边形”图)?有可能显示对数热图计数将是一个额外的好处。(对角线上的柱状图非常好。) 所谓“热图”,我指的是计数的2D直方图,与热图或热图类似: 使用Pandas、seaborn或matplotlib将非常好(可能是plot.ly) 我尝试了以下天真的变化,但没有成功: pairplot = sns.PairGrid(data) # sns = seaborn pairplot.map_offdiag(sns.kdepl

如何在Python中创建配对图,如下所示: 但是用热图代替点(或者代替“六边形”图)?有可能显示对数热图计数将是一个额外的好处。(对角线上的柱状图非常好。)

所谓“热图”,我指的是计数的2D直方图,与热图或热图类似:

使用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获得一个十六进制二进制网格,但我正在寻找一个“方形”2D直方图,Matplotlib的
hist2d()
不起作用)。

准备:

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

答复:

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

答案的关键是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())

不清楚您希望在热图上显示什么。这就是您想要的吗@mwaskom好的观点:我更新了问题(我指的是显示数据点计数的热图,即2D直方图)。@Michael,你指的是“十六进制bin”图,类似于十六进制。这个问题具体是关于一些不同的东西:“方形”2D直方图。然后你想要
plt.hist2d
。谢谢,但这是使用一个内核密度估计器,它接近我在问题代码中给出的,而不是我要找的。干净地处理关键字参数是一个很好的方法!