簡體   English   中英

在圓上繪制點,每個點根據出現的頻率遠離原點。 怪異的行為

[英]Plotting points on a circle, where each point is further from the origin based on how often it is present. Weird behavior

我有很多希望以度為單位(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()

在此處輸入圖片說明

這個輸出不是我的意圖。 我不確定哪里出了問題(我的幾何和數學從來都不是我的強項)。 如何制作我想要的情節?

我的數據如下所示:

在此處輸入圖片說明

可能您想顯示您的分布的內核密度估算值?

import numpy as np
import matplotlib.pyplot as plt
from scipy.stats import gaussian_kde

mu = 0.5
sigma = 0.1
values = np.random.normal(mu,sigma,10000)
values = values

phi = np.linspace(-np.pi,np.pi,1000)
xc = np.sin(phi)
yc = np.cos(phi)
plt.plot(xc,yc,color='black')


kde = gaussian_kde(values)
r = kde(phi)

# scale the kde by 1/10 to make it fit to the screen
x = (1+r/10.)*np.cos(phi)
y = (1+r/10.)*np.sin(phi)
plt.plot(x,y,color='red', zorder=0)


plt.axis('equal')
plt.show()

在此處輸入圖片說明

可能您也想在極坐標圖上顯示它。

import numpy as np
import matplotlib.pyplot as plt
from scipy.stats import gaussian_kde

mu = 0.5
sigma = 0.1
values = np.random.normal(mu,sigma,10000)
values = values

phi = np.linspace(-np.pi,np.pi,1000)
r0 = np.ones_like(phi)

fig, ax = plt.subplots(subplot_kw=dict(projection="polar"))
ax.plot(phi,r0,color='black')


kde = gaussian_kde(values)
r = kde(phi)

# scale the kde by 1/10 to make it fit to the screen
ax.plot(phi,(1+r/10),color='red', zorder=0)

ax.set_rgrids([])
ax.set_rlim(ymax=1.2*(1+r/10).max())
plt.show()

在此處輸入圖片說明

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM