使用Matplotlib绘制点显示不正确

时间:2019-04-04 16:25:06

标签: python numpy

我的目标是使用公式x ^ 2 + y ^ 2 <1创建两个随机数据数组,并检查它们是否落入半径为1的圆内。落入圆内的数据应绘制为蓝色圆圈和落在圆圈之外的圆圈应绘制为黄色圆圈。

我设法创建了数组,检查它们是否在圆内,然后绘制它们。

import matplotlib.pyplot as plt
import numpy as np


plots = 100
#creates x-coordinates
dataOne = np.random.random(size = plots)
#creates y-coordinates
dataTwo = np.random.random(size = plots)

circle = plt.Circle((0,0), 1, alpha = 0.1)
plt.gca().add_patch(circle)
plt.xlim(0, 2)
plt.ylim(0, 2)


squareDataOne = dataOne ** 2
squareDataTwo = dataTwo ** 2

squareRootData = np.sqrt(squareDataOne + squareDataTwo)

insideCircle = squareRootData < 1

for values in insideCircle:
    if values == True:
       plt.plot(squareDataOne, squareDataTwo, 'bo')
    else:
        plt.plot(squareDataOne, squareDataTwo, 'yo')

plt.show()  

我的问题在于情节本身。绘制时,我的点仍然落在圆外,但仍为蓝色。情节上根本没有出现黄色圆圈。任何有关我的代码错误的建议都将受到赞赏。

2 个答案:

答案 0 :(得分:0)

您应该尝试

for i in range(len(insideCircle)):
    if insideCircle[i]:
        plt.plot(dataOne[i], dataTwo[i], 'bo')
    else:
        plt.plot(dataOne[i], dataTwo[i], 'yo')

plt.show()    

编辑:您应该绘制dataOnedataTwo而不是squareDataOnesquareDataTwo(在代码中更改)

答案 1 :(得分:0)

您需要更多地考虑矢量化术语,并学习更多有关切片numpy数组的知识。有一个非常优雅的解决方案:

List<Fizz> applyChanges(List<Fizz> fizzes, Action action, Fizz toModify) {
    return fizzes.stream()
            .map(fizz -> fizz.getId().equals(toModify.getId()) ?
                    action.equals(Action.Replace) ? toModify : null : fizz)
            .filter(Objects::nonNull)
            .collect(Collectors.toList());
}