从(x,y,z)数据集中绘制matplotlib中的等值线/等高线

时间:2017-03-09 18:32:43

标签: python matplotlib contour

嗨,我是编程的新手,我正在尝试做一些可能非常明显的事情,但对于我的生活,我无法理解。我有一系列x,y,z数据(在我的例子中,对应于距离,深度和pH)。我想使用matplotlib在xy(距离,深度)网格上绘制z数据(pH)的等值线。有没有办法做到这一点?感谢。

1 个答案:

答案 0 :(得分:2)

解决方案取决于数据的组织方式。

常规网格上的数据

如果xy数据已经定义了网格,则可以轻松地将它们重新整形为四边形网格。 E.g。

#x  y  z
 4  1  3
 6  1  8
 8  1 -9
 4  2 10
 6  2 -1
 8  2 -8
 4  3  8
 6  3 -9
 8  3  0
 4  4 -1
 6  4 -8
 8  4  8 

可以使用

绘制为contour
import matplotlib.pyplot as plt
import numpy as np
x,y,z = np.loadtxt("data.txt", unpack=True)
plt.contour(x.reshape(4,3), y.reshape(4,3), z.reshape(4,3))

任意数据

(a)如果数据不是生活在四边形网格上,可以在网格上插入数据。 matplotlib本身使用matplotlib.mlab.griddata提供了一种方法。

import matplotlib.mlab
xi = np.linspace(4, 8, 10)
yi = np.linspace(1, 4, 10)
zi = matplotlib.mlab.griddata(x, y, z, xi, yi, interp='linear')
plt.contour(xi, yi, zi)

(b)最后,可以在不使用四边形网格的情况下完全绘制轮廓。这可以使用tricontour完成。

plt.tricontour(x,y,z)

matplotlib page上可以找到比较后两种方法的示例。