【问题标题】:Plotting heatmap for two scalar values with Python使用 Python 绘制两个标量值的热图
【发布时间】:2018-07-17 15:54:53
【问题描述】:

我正在尝试绘制两个自变量 xy 与因变量 score 作为热图的关系:xy 是从 0 到无穷大和 @987654333 的整数值@ 是介于 0 和 1 之间的实数值。

想要的外观

xy 有大量可见值,所以我想让它看起来更像一个典型的密度图,如下例所示,因为每个个体 (x, y) 的确切值是不是很重要:

(取自Seaborn's documentation的示例)

目前的做法

目前,我正在尝试使用 Seaborn 的 heatmap(..) 函数来绘制数据,但结果图几乎不可读,每个离散数据点之间有大量空间,而不是“连续”梯度。使用的绘图逻辑如下:

import pandas as pd
from matplotlib.pyplot import cm
import seaborn as sns

sns.set_style("whitegrid")

df = read_df_using_pandas(...)
table = df.pivot_table(
    values="score",
    index="y",
    columns="x", aggfunc='mean')
ax = sns.heatmap(table, cmap=cm.magma_r)
ax.invert_yaxis()
fig = sns_plot.get_figure()
fig.savefig("some_outfile.png", format="png")

结果图如下所示,这是错误的,因为它与上一节中描述的所需外观不匹配

我不知道为什么每个离散数据点之间存在大量空间而不是“连续”梯度。如何绘制由两个离散值组成的数据之间的关系( xy) 以模拟梯度密度图的方式表示为第三个标量值 (score)?该解决方案不需要使用 Seaborn 甚至 matplotlib。

【问题讨论】:

标签: python matplotlib plot heatmap seaborn


【解决方案1】:

使用 imshow

一个适用于我的示例,其中“toplot”是一个矩阵,其中包含您想要热图的值:

import matplotlib.pyplot as plt
fig = plt.figure(figsize=(6,6))
plt.clf()        

ax = fig.add_subplot(111)
toplot = INSERT MATRIX HERE
res = ax.imshow(toplot, cmap=plt.cm.viridis, vmin = 0)    
cb = fig.colorbar(res,fraction=0.046, pad=0.04)


plt.title('Heatmap')

plt.xlabel('x-axis')
plt.ylabel('y-axis')

row = np.where(toplot == toplot.max())[0][0]
column= np.where(toplot == toplot.max())[1][0]

plt.plot(column,row,'*')

plt.savefig('plots/heatmap.png', format='png')

我还添加了一颗星,表示情节中的最高点,这是我需要的。

【讨论】:

  • 如果在本例中使用heatmap 而不是imshow,情节看起来很相似,对吧?它看起来不像问题中显示的分段图。虽然关于输入数据的问题还不够清楚,但我怀疑仅仅使用imshow 就可以解决这个未知问题。有时问题中提供的信息无法回答问题。
  • 我刚刚测试了@errantlinguist 代码。适用于我的矩阵。也许熊猫数据没有正确转换?
  • @Alex 你的测试数据是什么样的,例如就列的 dtypes 而言?
  • 我使用的是 float64 数组
  • @errantlinguist 这很有趣;你通过公然冒犯我来回应我在这里提供帮助的企图;然而,从您向回答此问题的用户询问其输入数据这一事实来看,您甚至承认它确实取决于输入数据。不知道我会怎么称呼那些期望别人提供他们自己不愿意提供的东西的人,但你在上面三个 cmets 给出了一些选项。
猜你喜欢
  • 2016-12-21
  • 2018-11-29
  • 2022-11-02
  • 1970-01-01
  • 2020-10-12
  • 2020-03-31
  • 1970-01-01
  • 2017-06-17
  • 2019-09-03
相关资源
最近更新 更多