диаграммы рассеяния в определенном диапазоне - питон - PullRequest
1 голос
/ 08 октября 2019

По сути, мне нужно сделать квадратную диаграмму рассеяния от (0,1) до (0,1). Точки в четверти круга, центрированные в начале координат, должны быть окрашены в красный цвет, а те, что снаружи, должны быть окрашены в синий цвет. Я планировал сделать это, чтобы сделать 2 диаграммы рассеяния на одном графике, один с y1 = диапазон под четверть кругом, а другой с y2 = диапазон над четверть кругом.

Это то, что у меня пока есть:

import numpy as np
import matplotlib.pyplot as plt

x = np.random.random(500)
y1 < np.sqrt(1-x**2)
y2 > np.sqrt(1-x**2)

plt.xlim(0, 1)
plt.ylim(0, 1)

c1 = 'r'
c2 = 'b'
plt.scatter(x, y1, c=c1, cmap=plt.cm.jet)
plt.scatter(x, y2, c=c2, cmap=plt.cm.jet)
plt.axes().set_aspect(1)
plt.show()

Этот код дает мне этот график, , когда я должен получить как-то так. Если бы кто-то мог сказать мне, как исправить мои значения y1 и y2, я был бы признателен. Спасибо!

Ответы [ 2 ]

0 голосов
/ 08 октября 2019

IMO, ваш подход не совсем соответствует теме (предполагаемой) темы. На самом деле, речь идет о вычислении pi по отношению случайно распределенных точек в (четверти) окружности к квадрату.

Дело здесь не в том, чтобы вычислять координаты точек, а в том, чтобы они былираспределяется совершенно случайно. И после этого вы можете пойти и решить нанести на карту любой цвет, какой захотите, с любым базовым правилом или алгоритмом.
Короче, таков мой подход:

import numpy as np
import matplotlib.pyplot as plt

x = np.random.random(500)
y = np.random.random(500)

plt.xlim(0, 1)
plt.ylim(0, 1)

c = np.where(x**2 + y**2 < 1, 'r', 'b')

plt.scatter(x, y, c=c)

plt.gca().set_aspect(1)
plt.show()

enter image description here


для полноты примера предполагаемой темы:

for i in range(1,9):
    x = np.random.random(10**i)
    y = np.random.random(10**i)
    d = np.where(x**2 + y**2 < 1, 1, 0)
    print(f'{10**i:>9} points: {4*np.sum(d)/d.size}')

#        10 points: 2.8
#       100 points: 3.08
#      1000 points: 3.076
#     10000 points: 3.1556
#    100000 points: 3.14456
#   1000000 points: 3.141884
#  10000000 points: 3.142634
# 100000000 points: 3.14158668
0 голосов
/ 08 октября 2019

Если вы присмотритесь к

y1 < np.sqrt(1-x**2)
y2 > np.sqrt(1-x**2)

... эти две строки дают только логические массивы. Код, который вы опубликовали, на самом деле выдает ошибку, из которой ясно, что вы никогда не сохраняли y1 и y2.

Поэтому вам лучше:

x = np.random.random(500)
y = np.sqrt(1-np.random.random(500)**2)
x1 = x[y<x]
y1 = y[y<x]
...

PS: адаптировано, теперь x и yбольше не связано напрямую, соответствует комментариям

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...