【问题标题】:Heatmap in Python using matplotlib from 3 independent arraysPython中的热图使用来自3个独立数组的matplotlib
【发布时间】:2020-01-08 16:19:39
【问题描述】:

我想使用三个独立的向量 x、y 和 z 绘制热图。我查看了互联网上的示例,其中大多数展示了如何为表示为 2D 矩阵的 x、y 和 z 绘制热图

那么,有人可以帮我了解如何将 3 个独立向量转换为 2d 矩阵,我最终可以用它来绘制热图

我想到的一件事是通过首先离散化并按升序排列 x 和 y 并在新的“x”和“y”组合处找到 z 来创建矩阵。但是,可能存在由于插值期间缺少数据而无法计算“z”的情况

我有点迷茫,想寻求这方面的帮助

【问题讨论】:

  • 我投票结束这个,它太宽泛和模糊了。 OP,您可能需要指南/教程或文档。
  • @ImportanceOfBeingErnest :感谢您的链接。我从中取出了一些有价值的东西。我现在已经设法使用 griddata 和 meshgrid 创建了一个插值矩阵“z”作为“x”和“y”的函数。等高线图工作正常,但我仍然需要做热图现在,我尝试使用 seaborn 包。该命令非常简单 sns.heatmap(yourmatrix)。但问题是创建的热图在轴上的索引从 1 到 n(其中 n 是元素的数量)而不是“x”和“y”值。因此,热图没有意义。任何解决方法?
  • 不要使用 seaborn。 matplotlib 的 imshowpcolormesh 都可以。
  • @ImportanceOfBeingErnest :非常感谢您的提示。我尝试了 pcolormesh,就像这样 - plt.pcolormesh(zi)。但是您知道如何输入有关“x”和“y”的信息,因为没有它,热图将没有任何意义,因为它是针对轴绘制的,轴是从 1 到“x”中值的最大数量和“是”

标签: python numpy matplotlib heatmap


【解决方案1】:

看看pcolormesh。它可以满足您的需求:创建不位于常规网格上的数据热图。您可以指定如何对数据进行插值(和外插)。

来自文档:

matplotlib.pyplot.pcolormesh(*args, alpha=None, norm=None, cmap=None, vmin=None, vmax=None, shading='flat', antialiased=False, data=None, **kwargs)

使用非规则矩形网格创建伪彩色图。

调用签名:

pcolor([X, Y,] C, **kwargs)

X 和 Y 可用于指定四边形的角。

【讨论】:

    【解决方案2】:

    感谢小组成员。在您的帮助下,我已经能够更接近解决方案。我做的是

    import numpy as np
    from scipy.interpolate import griddata
    import matplotlib.pyplot as plt
    
    x = mdf_merged.get('VariableX').samples
    y = mdf_merged.get('VariableY').samples
    z = mdf_merged.get('VariableZ').samples
    ###
    xi = np.linspace(min(x),max(x),10)
    yi = np.linspace(min(y),max(y),20)
    zi = griddata((x, y), z, (xi[None,:], yi[:,None]), method='linear')
    plt.pcolormesh(xi, yi, zi)
    

    【讨论】:

    • pcolormesh的重点是可以处理非网格化的数据。如果您仍然要进行插值,请使用imshow
    猜你喜欢
    • 1970-01-01
    • 2016-09-18
    • 2020-12-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-02-04
    • 1970-01-01
    • 2014-05-07
    相关资源
    最近更新 更多