所以基本上,我需要做一个曲面的等高线图-我知道如果我有一个函数,我可以做这样的事情:
x = np.linspace(0, 2, 101)
y = np.linspace(0, 2, 101)
x, y = np.meshgrid(x, y)
fig,ax2 = plt.subplots(1)
ax2.contourf(x,y,q_func(x,y))
但是如果我有一组x点,一组y点和一组z点呢。我不知道为什么该死的z点需要是一个二维数组,比如我在数组里放了什么??你知道吗
有人能解释为什么z值需要是一个2-D数组,以及在里面放什么吗。你知道吗
谢谢!你知道吗
假设你想画一个三维图形。有一组
x
点和一组y
点。目标是为每对x
和y
生成一个值z
,或者换句话说,您需要一个函数f
,这样它就生成了一个z
的值,这样z = f(x, y)
。你知道吗下面是一个很好的例子(摘自MathWorks):
x
和y
坐标分别位于右下角和左下角。您将拥有一个函数f
,这样对于每一对x
和y
,我们生成一个z
值。因此,在您提供的代码中,numpy.meshgrid
调用将生成两个二维数组,这样对于每个唯一的空间位置,我们将观察该位置唯一的x
和y
值。你知道吗例如,让我们用一个非常小的例子:
以第2行和第1列为例(我从0 btw开始索引)。这意味着在这个空间位置,我们将有坐标
x = 0.
和y = 1
。numpy.meshgrid
给出了x
和y
对,这是在特定坐标下生成z
值所必需的。为了方便起见,它被分成两个二维阵列。你知道吗现在,最后要放入
z
变量的是,它应该使用函数f
,并处理x
中每个值的输出及其对应的y
。你知道吗显式地,您需要建立一个
z
数组,它是2D的,这样:仔细观察
x
和y
项的空间排列。我们为每对x
和y
值生成9个唯一值。x
值的范围从-1到1,y
的值相同。为z
生成此二维数组后,可以使用contourf
绘制标高集,以便每条等高线将为您提供所有可能的x
和y
值的集合,这些值等于z
的相同值。此外,在每对相邻的不同线条之间,我们用相同的颜色填充中间的区域。你知道吗让我们用一个实际的例子来结束这个过程。假设我们有函数
f(x, y) = exp(-(x**2 + y**2) / 10)
。这是一个标准偏差为sqrt(5)
的二维高斯分布。你知道吗因此,让我们生成一个由
x
和y
值组成的网格,使用它来生成z
值并绘制contourf
图:我们得到:
相关问题 更多 >
编程相关推荐