【问题标题】:How to apply contour to z matrix which has the same dimension as x- and y matrix如何将轮廓应用于与 x 和 y 矩阵具有相同维度的 z 矩阵
【发布时间】:2022-12-04 06:22:34
【问题描述】:

我的数据集包含 x、y 坐标和能量表面 z。我需要把它们变成this image。问题是 z 需要具有 (x, y) 的维度,但它们三个都是长度为 10201 的一维 numpy 数组(z 中的一些值也是 inf)。我试图将 z 变成一个 meshgrid

Z, Z = np.meshgrid(z,z)

然后尝试

ax.contour(x, y, Z)

但结果是this。它应该怎么做呢?

我试图将 z 变成一个 meshgrid,试图删除所有在 z 中包含 inf 值的行,试图将它们全部变成 meshgrids

【问题讨论】:

    标签: python matplotlib contour


    【解决方案1】:

    要从 x、y 和 z 坐标的一维数组创建等高线图,您可以使用 NumPy 的 meshgrid 函数从一维数组创建二维网格,然后使用 Matplotlib 中的等高线函数创建等高线图。

    首先,您需要使用 NumPy 的 meshgrid 函数从 x 和 y 坐标的一维数组创建二维网格。您可以通过调用 np.meshgrid(x, y) 来执行此操作,其中 x 和 y 分别是您的 x 和 y 坐标的一维数组。这将返回两个二维网格,一个用于 x 坐标,一个用于 y 坐标。

    接下来,您可以使用 Matplotlib 中的等高线函数来创建等高线图。您可以通过调用 ax.contour(x, y, z) 来执行此操作,其中 ax 是要在其上绘制等高线图的坐标区对象,x 和 y 是您使用 meshgrid 创建的 x 和 y 坐标的二维网格, z 是 z 坐标的一维数组。这将创建一个等高线图,x 和 y 坐标分别位于 x 轴和 y 轴上,z 值作为等高线水平。

    要记住的一件事是,如果您的 z 数组中有任何 inf 值,它们将导致 contour 函数抛出错误。在这种情况下,您需要在创建等高线图之前从 z 数组中删除 inf 值。为此,您可以使用 NumPy 的 isinf 函数在 z 数组中查找 inf 值的索引,然后使用这些索引从 z 数组中仅选择非 inf 值。

    下面是一个示例,说明如何使用这些步骤从 x、y 和 z 坐标的一维数组创建等高线图:

    import numpy as np
    import matplotlib.pyplot as plt
    
    # 1D arrays of x, y, and z coordinates
    x = ...
    y = ...
    z = ...
    
    # Create 2D grids of x and y coordinates
    X, Y = np.meshgrid(x, y)
    
    # Remove inf values from z array
    z_noninf = z[~np.isinf(z)]
    
    # Create figure and axes object
    fig, ax = plt.subplots()
    
    # Create contour plot
    ax.contour(X, Y, z_noninf)
    
    # Add x and y labels
    ax.set_xlabel('x')
    ax.set_ylabel('y')
    
    # Show the plot
    plt.show()
    

    我希望这有帮助!

    【讨论】:

      猜你喜欢
      • 2021-05-25
      • 1970-01-01
      • 1970-01-01
      • 2017-08-12
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多