У меня есть большое количество значений оттенков, выраженных в градусах (от 0 до 360), которые я хочу нанести на окружность.
Вот некоторые «тестовые» данные.Мои реальные данные похожи на это.
# create values with a normal distributions.
mu = 0.5
sigma = 0.02
values = np.random.normal(mu,sigma,10000)
values = values*360
Теперь я создаю простой круг.
# create a circle
circle = np.linspace(0,2*np.pi,1000)
x = np.sin(circle)
y = np.cos(circle)
plt.plot(x,y,color='black')
plt.axis('equal')
plt.show()
Далее я хочу разместить свои данные на этомкруг.
# plot values on circle
x = []
y = []
for i in values:
x.append(round(math.cos(math.radians(i)),2))
y.append(round(math.sin(math.radians(i)),2))
plt.scatter(x,y,color='red')
plt.show()
Хммм.Итак, значения нанесены на круг.Но теперь это выглядит так, как будто точки более или менее одинаково вероятны в пределах спреда.Я хотел бы показать данные таким образом, чтобы вы могли видеть распределение данных тоже.Что-то вроде нормальной кривой колокола.То есть я хотел бы что-то вроде этого (не обращайте внимания на плохие навыки рисования)
На этом изображении, дальше от черногокруг, тем чаще мы находим эти данные точек.В основном, круглая нормальная кривая колокола.
Я пытался умножить каждую точку данных на значение, которое увеличивается с увеличением вероятности для этого значения.Т.е. чем вероятнее точка данных, тем дальше она находится от черного круга.(Просто как кривая колокола, но не по кругу), но это дает мне эти странные результаты.
uniqueX = set(x)
uniqueY = set(y)
countx = max([x.count(i) for i in set(x)])
county = min([y.count(i) for i in set(y)])
ofset = [((1/countx*x.count(i))+1) for i in x]
x = [x*ofset[ii] for ii,x in enumerate(x)]
y = [x*ofset[ii] for ii,x in enumerate(y)]
plt.scatter(x,y,color='red')
plt.show()
Этот вывод не тот, который я намеревался.Я не уверен, где я иду не так (моя геометрия и математика никогда не были моей сильной стороной).Как я могу сделать свой желаемый сюжет?
Мои данные выглядят так: