数组中高于给定值的点的散点图

Scatter plot for points in an array above a given value

import matplotlib.pyplot as plt
import numpy as np

fig = plt.figure()

eps = 0.8

X = np.linspace(-1, 1, 100)
Y = np.linspace(-1, 1, 100)
X, Y = np.meshgrid(X, Y)
Z = np.exp(-X**2-Y**2)

data_zero_x = np.array([])
data_zero_y = np.array([])

for i in range(len(X)):
    for j in range(len(Y)):
        if Z[i][j] > eps:
            data_zero_x = np.append(data_zero_x, X[i])
            data_zero_y = np.append(data_zero_y, Y[j])

plt.scatter(data_zero_x, data_zero_y)
plt.show()

你好! 我希望这段代码在原点周围产生圆点,因为这是函数 Z 高于 eps=0.8 的地方。相反,我从中得到了一张矩形图片。知道我在这里做错了什么吗?另外,如果有更好的方法来编写这样的代码,我会洗耳恭听。

试试这个:

import matplotlib.pyplot as plt
import numpy as np

eps = 0.8

X = np.linspace(-1, 1, 100)
Y = np.linspace(-1, 1, 100)
X, Y = np.meshgrid(X, Y)
Z = np.exp(-X**2-Y**2)

mask = Z > eps
plt.scatter(X[mask], Y[mask])
plt.show()

由于您使用的是 numpy 数组,因此无需遍历整个数组并检查每个元素的条件 (> 0.8)。 Numpy 数组重载了比较运算符,因此当您比较整个数组时,它会隐式循环遍历每个元素和 returns 另一个数组,其中 TrueFalse 用于原始数组中的每个元素。然后,您可以像我在上面的代码中所做的那样,将此数组用作来自其他数组的 select 元素的掩码。

此外,当您使用 plt.scatter 时,您不需要行 fig = plt.figure()。如果想使用面向对象的方法,您只需要在其中显式创建图形和轴并调用轴对象的绘图方法。