Matplotlib:绘制独立于 x 和 y 的轮廓线

Matplotlib: Drawing contour lines independent of x and y

我正在尝试绘制与 x 和 y 坐标相关联的等高线(高程)。我已经阅读了有关当 z 由 x 和 y 定义时如何在 Matplotlib 上绘制等高线的示例 here,但是我如何绘制独立于 x 和 y 的等高线?

这是我的代码:

import numpy as np
import matplotlib.pyplot as plt

data = [(0, 200, 140), (100, 430, 260), (800, 340, 320), (250, 110, 430), (290, 40, 100), (590, 35, 180)]
x = np.arange(0, 900, 20)
y = np.arange(0, 500, 20)
X, Y = np.meshgrid(x, y)
Z = [i[2] for i in data]
Z = np.array(Z)
plt.figure()
plt.contour(X, Y, Z)
plt.show()

我得到一个错误 "TypeError: Input z must be a 2D array."

这是我第一次尝试绘制等高线,非常感谢任何帮助。

鉴于只有 6 个数据点,从这些点绘制的等高线图可能信息量不大。尽管如此,对于更多点来说,这个概念是相同的。

当然不能画x,y,z独立的等高线。如果你有 6 个 z 点,你需要 6 个 x 点和 6 个 y 点——你已经有了。所以解决方案可能相当简单 - 只需使用 tricontour 而不是 contour:

import numpy as np
import matplotlib.pyplot as plt

data = [(0, 200, 140), (100, 430, 260), (800, 340, 320), 
        (250, 110, 430), (290, 40, 100), (590, 35, 180)]
x,y,z = zip(*data)
plt.figure()
plt.tricontour(x,y,z)
plt.show()

更一般地说,您还可以对数据进行插值。参见 Make contour of scatter