【问题标题】:Plotting 2 variables with a heat map用热图绘制 2 个变量
【发布时间】:2016-12-21 13:48:35
【问题描述】:

我在 python 3 上,我有两个变量 x 和 y,其中 x 的范围从 1 到 5,y 的范围从 0.03 到 0.7,然后我有一个采用 x 和 y 并生成标量数的方法。我想创建一个热图类型图,其中 x 作为 x 轴,y 作为 y 轴和一个颜色键来表示方法 f(x,y)。这是怎么做到的?我尝试过使用热图,但由于范围无法获得合适的 x 和 y 范围,罐头似乎可以让它工作。这是我找到的一个示例,它与我正在寻找的内容很接近

import numpy as np
import numpy.random
import matplotlib.pyplot as plt


x = np.random.randn(8873)
y = np.random.randn(8873)

heatmap, xedges, yedges = np.histogram2d(x, y, bins=50)
extent = [xedges[0], xedges[-1], yedges[0], yedges[-1]]

plt.clf()
plt.imshow(heatmap, extent=extent)
plt.show()

但我希望颜色用一个键来表示 f(x,y)

【问题讨论】:

    标签: python plot heatmap


    【解决方案1】:

    让我们说z = f(x, y)。您的热图的键只能代表一个维度(通常是 z)。什么意思

    表示方法f(x,y)

    对于二维绘图,您需要一个 3 维热图。

    【讨论】:

    • 颜色代表第三维
    • @JLT 你是对的。 heatmap(x, y, f(x, y)) 是三维的。
    【解决方案2】:

    如果您从 2 个一维向量 xy 开始在 2D 点的网格上计算 xy 的函数,您必须首先使用 @987654327 生成所述二维网格@。

    from numpy import linspace, meshgrid
    x, y = linspace(1, 5, 41), linspace(0.03, 0.70, 68)
    X, Y = meshgrid(x, y)
    

    看到你得到两个网格有点令人惊讶......一个只包含x值,另一个只包含y值(你只需打印XY自己看看)。

    有了这两个网格,您可以计算结果网格,但这仅在您使用 numpyufuncs 时才有效...例如

    def f(x, y):
        from numpy import sin, sqrt
        return sin(sqrt(x*x+y*y))
    

    最终你可以绘制你的结果,你想要使用的pyplot方法是pcolor,并且添加一个你必须使用的颜色条,总是来自pyplotcolorbar方法......

    from matplotlib.pyplot import colorbar, pcolor, show
    Z = f(X, Y)
    pcolor(X, Y, Z)
    colorbar()
    show()
    

    当最终达到这一点时,传统会要求提供样本输出 就是这样

    【讨论】:

    • 请注意,您还可以将散点图用于不同的功能:例如: plt.scatter(X,Y,c=Z, alpha=0.8, cmap='viridis', marker='s ')
    猜你喜欢
    • 1970-01-01
    • 2022-11-02
    • 1970-01-01
    • 2022-07-19
    • 2021-04-05
    • 2018-07-17
    • 2016-12-16
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多