使用Matplotlib打印点显示不正确

2024-10-06 06:58:20 发布

您现在位置:Python中文网/ 问答频道 /正文

我的目标是创建两个随机数据数组,并使用公式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()  

我的问题在于情节本身。绘制时,我有点落在圆外,仍然是蓝色的。情节上根本没有出现黄色的圆圈。任何关于我的代码哪里出错的建议都将不胜感激


Tags: importasnp绘制pltrandom数组蓝色
2条回答

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

is_inside = np.sqrt(dataOne**2 + dataTwo**2) < 1
plt.plot(dataOne[is_inside], dataTwo[is_inside], 'bo')
plt.plot(dataOne[~is_inside], dataTwo[~is_inside], 'yo')

你应该试试

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(在代码中更改)

相关问题 更多 >