用Numpy MeshGrid绘制2D等高线图的最佳方法

时间:2019-05-20 12:40:52

标签: python numpy matplotlib

我正在寻找使用numpy meshgrid创建轮廓图的最佳方法。

我在简化的列中有excel数据,如下所示:

x data values: -3, -2, -1, 0, 1, 2 ,3, -3, -2, -1, 0, 1, 2, 3
y data values:  1,  1,  1, 1, 1, 1, 1,  2,  2,  2, 2, 2, 2, 2
z data values:  7 , 5,  6, 5, 1, 0, 9,  5,  3,  8, 3, 1, 0, 4

x和y值定义2d平面,其长度(x轴)为7个值,深度(y轴)为2个值。 z值定义相应点(或多或少的z轴)上的颜色。

我尝试过:

import matplotlib.pyplot as plt
import numpy as np

x = [-3,-2,-1,0,1,2,3]

y = [1,2]

z = [7,5,6,5,1,0,9,5,3,8,3,1,0,4]

x, y = np.meshgrid(x, y)

A = np.array(z)
B = np.reshape(A, (-1, 2))

fig = plt.figure()
ax1 = plt.contourf(x, y, B)

plt.show()

我很确定我没有得到网状网格的工作方式。我是否必须使用整个x和y值列表才能起作用?

我如何创建一个矩形2d图,其长度(x)为7,深度(y)为2,z值定义x和y值处的阴影/颜色?

预先感谢大家!

3 个答案:

答案 0 :(得分:1)

这是使用网状网格(XY)的形状来重塑z数组的一种方法。此外,您可以使用plt.colorbar()

添加颜色栏。
import matplotlib.pyplot as plt
import numpy as np

x = [-3,-2,-1,0,1,2,3]
y = [1,2]
z = np.array([7,5,6,5,1,0,9,5,3,8,3,1,0,4])

X, Y = np.meshgrid(x, y)
print (X.shape, Y.shape)
# (2, 7) (2, 7) Both have same shape
Z = z.reshape(X.shape) # Use either X or Y to define shape

fig = plt.figure()
ax1 = plt.contourf(X, Y, Z)
plt.colorbar(ax1)
plt.show()

enter image description here

答案 1 :(得分:0)

尝试

adimages

编辑:如果您希望根据自己的评论进行平滑处理,可以尝试按照here进行操作,例如ad_id,例如您的情况

x_, y_ = np.meshgrid(x, y)
z_grid = np.array(z).reshape(2,7)
fig = plt.figure()
ax1 = plt.contourf(x_,y_,z_grid)
plt.show()

然后像以前一样绘制:

scipy.ndimage.zoom()

image here

答案 2 :(得分:0)

def f(x, y):
    return np.sin(x) ** 10 + np.cos(10 + y * x) * np.cos(x)
import numpy as np
import matplotlib.pyplot as plt
x = np.linspace(0, 2, 3 )
y = np.linspace(0, 3, 4)
X, Y = np.meshgrid(x, y)
Z = f(X, Y)
plt.contour(X, Y, Z, cmap='RdGy');