Python 用热图对绘图(可能是对数图)?
如何在Python中创建配对图,如下所示: 但是用热图代替点(或者代替“六边形”图)?有可能显示对数热图计数将是一个额外的好处。(对角线上的柱状图非常好。) 所谓“热图”,我指的是计数的2D直方图,与热图或热图类似: 使用Pandas、seaborn或matplotlib将非常好(可能是plot.ly) 我尝试了以下天真的变化,但没有成功: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
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以对数映射计数,则可以使用matplotlibLogNorm
轻松实现这一点:
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
。谢谢,但这是使用一个内核密度估计器,它接近我在问题代码中给出的,而不是我要找的。干净地处理关键字参数是一个很好的方法!