数组中高于给定值的点的散点图
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 另一个数组,其中 True
和 False
用于原始数组中的每个元素。然后,您可以像我在上面的代码中所做的那样,将此数组用作来自其他数组的 select 元素的掩码。
此外,当您使用 plt.scatter
时,您不需要行 fig = plt.figure()
。如果想使用面向对象的方法,您只需要在其中显式创建图形和轴并调用轴对象的绘图方法。
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 另一个数组,其中 True
和 False
用于原始数组中的每个元素。然后,您可以像我在上面的代码中所做的那样,将此数组用作来自其他数组的 select 元素的掩码。
此外,当您使用 plt.scatter
时,您不需要行 fig = plt.figure()
。如果想使用面向对象的方法,您只需要在其中显式创建图形和轴并调用轴对象的绘图方法。