在python中使用三个1D数组制作等高线图

问题描述 投票:1回答:3

正如标题所示,我想通过使用三个1D阵列来制作等高线图。我们这样说吧

x = np.array([1,2,3])

y = np.array([1,2,3])

z = np.array([20,21,45])

要在matplotlib中做一个等值线图,我将xy坐标网格化为X,Y = meshgrid(x,y),但是z数组也必须是一个二维数组。然后,我如何将z变成二维数组,以便可以使用它?

python contour
3个回答
1
投票

你的z是错的。它需要在网格的每个点给出值。如果zxy的函数,请计算z,我在下面称为X_grid

import numpy as np
import matplotlib.pyplot as plt

def f(x):
    return (x[:,0]**2 + x[:,1]**2)

x = np.array([1,2,3])
y = np.array([1,2,3])
xx, yy = np.meshgrid(x, y)
X_grid = np.c_[ np.ravel(xx), np.ravel(yy) ]
z = f(X_grid)

z = z.reshape(xx.shape)

plt.contour(xx, yy, z)

0
投票

在我看来,你是通过空间而不是表面描述一维曲线。我说,因为我认为x[i]y[i]z[i]是一个点的坐标。您不能使用这些点以简单的方式定义曲面,因为您的点仅依赖于一个变量i,因此仅描述具有一个自由度的形状。考虑一下,您可以将列表中的每个点连接到下一个点,并且这只会为您提供一维点链。要在三个阵列中制作曲面,必须定义9个z值,而不是3个。

对不起,这不是一个有用的答案,但我没有发表评论的声誉。


0
投票

如果我使用的数据更容易操作,我会经常遇到这个问题。在分级数据中,二维阵列变平。

原始数据包含每个坐标的x,y和z值:

x = [0, 1, 2; 0, 1, 2]

y = [0, 0, 0; 1, 1, 1]

z = [0.1 , 0.2, 0.3 ; 0.2, 0.3, 0.4]

对所有三个数组使用np.ravel()使它们成为一维6元素长数组。

xx = np.ravel(x); yy = np.ravel(y) ; zz = np.ravel(z)

现在xx =([0,1,2,0,1,2]),yy和zz也是如此。

如果这是您正在使用的数据类型并且数据已经过彻底采样,则可以使用散点图模拟等高线图。这仅适用于您的数据集采样得足够好以填充所有空间。

plt.scatter(xx,yy,c=zz,cmap=cm.Reds)

enter image description here

© www.soinside.com 2019 - 2024. All rights reserved.