我正在使用python绘制正弦波和随机分布,然后显示比率大于或等于3的地方。
我认为我已经完成了90%的工作,但是在尝试绘制错误消息时,始终收到错误消息“ x和y必须具有相同的大小”。我一直在绞尽脑汁,但无法弄清我的缺失。
非常感谢收到任何帮助或指示。
import numpy as np
import math
import matplotlib.pyplot as plt
r= 2*math.pi
dev = 0.1
x = np.array(np.arange(0, r, dev))
y1 = np.array(np.sin(x))
y2 = np.array(np.random.normal(loc=0, scale=0.1, size=63))
mask = y1//y2 >= 3
fit = np.array(x[mask])
print(fit)
plt.plot(x, y1)
plt.scatter(x, fit)
plt.scatter(x, y2, marker=".")
plt.show()
答案 0 :(得分:2)
在错误点之前将这行插入代码中:
print(len(x), len(fit))
输出:
63 28
您已从序列中明确删除元素,然后期望它们的大小相同。您仍然有63个x
值,但现在只有28个y
值。由于您没有跟踪问题并解释了此散点图的用途,因此我无法知道“修复”的可能。也许列出一个点(x-y对),然后过滤那个以得到合适的y1 / y2比率?
答案 1 :(得分:1)
不确定这是否是您想要的,但这会分散与您的面罩相对应的正弦曲线上的点。
import numpy as np
import math
import matplotlib.pyplot as plt
r= 2*math.pi
dev = 0.1
x = np.array(np.arange(0, r, dev))
y1 = np.array(np.sin(x))
y2 = np.array(np.random.normal(loc=0, scale=0.1, size=63))
mask = y1//y2 >= 3
fit_x = np.array(x[mask])
fit_y = np.array(y1[mask])
plt.plot(x, y1)
plt.scatter(fit_x, fit_y)
plt.scatter(x, y2, marker=".")
plt.show()
答案 2 :(得分:1)
在您的行plt.scatter(x, fit)
中,您尝试将x值与适合值分散。但是,适合的大小仅为25号文件,而x的大小为63号(y1和y2顺便说一句,这就是该部分起作用的原因)。
mask
基本上是False或True值的数组。这意味着如果您使用np.array(x[mask])
函数。它将仅创建x实际为True的值的数组,这似乎是您想要的。但是您只能将其散布在np.array(np.sin(fit))
之类的东西上,否则大小与散布不兼容。