- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
在过去的几天里,我一直在尝试使用 python 绘制圆形数据,方法是构建一个范围从 0 到 2pi 的圆形直方图并拟合 Von Mises 分布。我真正想要实现的是:
from scipy.special import i0
import numpy as np
import matplotlib.pyploy as plt
# From my data I fitted a Von-Mises distribution, calculating Mu and Kappa.
mu = -0.343
kappa = 10.432
# Construct random Von-Mises distribution based on Mu and Kappa values
r = np.random.vonmises(mu, kappa, 1000)
# Adjust Von-Mises curve from fitted data
x = np.linspace(-np.pi, np.pi, num=501)
y = np.exp(kappa*np.cos(x-mu))/(2*np.pi*i0(kappa))
# Adjuste x limits and labels
plt.xlim(-np.pi, np.pi)
plt.xticks([-np.pi, -np.pi/2, 0, np.pi/2, np.pi],
labels=[r'$-\pi$ (0º)', r'$-\frac{\pi}{2}$ (90º)', '0 (180º)', r'$\frac{\pi}{2}$ (270º)', r'$\pi$'])
# Plot adjusted Von-Mises function as line
plt.plot(x, y, linewidth=2, color='red', zorder=3
# Plot distribution
plt.hist(r, density=True, bins=20, alpha=1, edgecolor='white');
plt.title('Slaty Cleavage Strike', fontweight='bold', fontsize=14)
# From the data above (mu, kappa, x and y):
theta = np.linspace(-np.pi, np.pi, num=50, endpoint=False)
radii = np.exp(kappa*np.cos(theta-mu))/(2*np.pi*i0(kappa))
# Bin width?
width = (2*np.pi) / 50
# Construct ax with polar projection
ax = plt.subplot(111, polar=True)
# Set Zero to North
ax.set_theta_zero_location('N')
ax.set_theta_direction(-1)
# Plot bars:
bars = ax.bar(x = theta, height = radii, width=width)
# Plot Line:
line = ax.plot(x, y, linewidth=1, color='red', zorder=3)
# Grid settings
ax.set_rgrids(np.arange(1, 1.6, 0.5), angle=0, weight= 'black');
[0,2pi]
开始感到困惑。或
[-pi,pi]
.我意识到我的圆形直方图中绘制的错误方向来自以下内容:
[0,2pi]
之间,即 0 到 360 度; [-pi, pi]
中计算概率密度函数; my_data - pi
; Mu
和 Kappa
计算(正确),我添加了 pi
到 Mu
值(value),恢复原来的方向,现在再次介于[0,2pi]
之间. # Add pi to fitted Mu.
mu = - 0.343 + np.pi
kappa = 10.432
x = np.linspace(-np.pi, np.pi, num=501)
y = np.exp(kappa*np.cos(x-mu))/(2*np.pi*i0(kappa))
theta = np.linspace(-np.pi, np.pi, num=50, endpoint=False)
radii = np.exp(kappa*np.cos(theta-mu))/(2*np.pi*i0(kappa))
# Bin width?
width = (2*np.pi) / 50
ax = plt.subplot(111, polar=True)
# Angles increase clockwise from North
ax.set_theta_zero_location('N')
ax.set_theta_direction(-1)
bars = ax.bar(x = theta, height = radii, width=width)
line = ax.plot(x, y, linewidth=1, color='red', zorder=3)
ax.set_rgrids(np.arange(1, 1.6, 0.5), angle=0, weight= 'black');
编辑 2
y_lim
, 如下:
# SE DIRECTION
mu = - 0.343 + np.pi
kappa = 10.432
x = np.linspace(-np.pi, np.pi, num=501)
y = np.exp(kappa*np.cos(x-mu))/(2*np.pi*i0(kappa))
theta = np.linspace(-np.pi, np.pi, num=50, endpoint=False)
radii = np.exp(kappa*np.cos(theta-mu))/(2*np.pi*i0(kappa))
# PLOT
plt.figure(figsize=(5,5))
ax = plt.subplot(111, polar=True)
# Bin width?
width = (2*np.pi) / 50
# Angles increase clockwise from North
ax.set_theta_zero_location('N'); ax.set_theta_direction(-1);
bars = ax.bar(x=theta, height = radii, width=width, bottom=0)
# Plot Line
line = ax.plot(x, y, linewidth=2, color='firebrick', zorder=3 )
# 'Trick': This will display Zero as a circle. Fitted Von-Mises function will lie along zero.
ax.set_ylim(-0.5, 1.5);
ax.set_rgrids(np.arange(0, 1.6, 0.5), angle=60, weight= 'bold',
labels=np.arange(0,1.6,0.5));
最后说明:
最佳答案
这是我取得的成绩:
我不完全确定您是否希望 x 的范围为 [-pi,pi]
或 [0,2pi]
.如果您想要范围 [0,2pi]
相反,只需注释掉这些行 ax.set_xlim
和 ax.set_xticks
.
from scipy.special import i0
import numpy as np
import matplotlib.pyplot as plt
# From my data I fitted a Von-Mises distribution, calculating Mu and Kappa.
mu = -0.343
kappa = 10.432
# Construct random Von-Mises distribution based on Mu and Kappa values
r = np.random.vonmises(mu, kappa, 1000)
# Adjust Von-Mises curve from fitted data
x = np.linspace(-np.pi, np.pi, num=501)
y = np.exp(kappa*np.cos(x-mu))/(2*np.pi*i0(kappa))
# Adjuste x limits and labels
plt.xlim(-np.pi, np.pi)
plt.xticks([-np.pi, -np.pi/2, 0, np.pi/2, np.pi],
labels=[r'$-\pi$ (0º)', r'$-\frac{\pi}{2}$ (90º)', '0 (180º)', r'$\frac{\pi}{2}$ (270º)', r'$\pi$'])
# Plot adjusted Von-Mises function as line
plt.plot(x, y, linewidth=2, color='red', zorder=3)
# Plot distribution
plt.hist(r, density=True, bins=20, alpha=1, edgecolor='white')
plt.title('Slaty Cleavage Strike', fontweight='bold', fontsize=14)
# From the data above (mu, kappa, x and y):
theta = np.linspace(-np.pi, np.pi, num=50, endpoint=False)
radii = np.exp(kappa * np.cos(theta - mu)) / (2 * np.pi * i0(kappa))
# Display width
width = (2 * np.pi) / 50
# Construct ax with polar projection
ax = plt.subplot(111, polar=True)
# Set Orientation
ax.set_theta_zero_location('E')
ax.set_theta_direction(-1)
ax.set_xlim(-np.pi/1.000001, np.pi/1.000001) # workaround for a weird issue
ax.set_xticks([-np.pi/1.000001 + i/8 * 2*np.pi/1.000001 for i in range(8)])
# Plot bars:
bars = ax.bar(x=theta, height=radii, width=width)
# Plot Line:
line = ax.plot(x, y, linewidth=1, color='red', zorder=3)
# Grid settings
ax.set_rgrids(np.arange(.5, 1.6, 0.5), angle=0, weight='black')
plt.show()
关于python - 拟合 Von Mises 分布的圆形直方图,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/67282865/
在过去的几天里,我一直在尝试使用 python 绘制圆形数据,方法是构建一个范围从 0 到 2pi 的圆形直方图并拟合 Von Mises 分布。我真正想要实现的是: 具有拟合 Von-Mises 分
我有一个角分布,我想将 von Mises 分布的混合拟合到它 我该怎么做? 我在 R 中找到一个实现,Fit a mixture of von Mises distributions in R 我还
我正在尝试找出定义包裹在半圆上的 von-Mises 分布的最佳方法(我用它来绘制不同浓度的无方向线)。我目前正在使用 SciPy 的 vonmises.rvs()。本质上,我希望能够输入 pi/2
我有一组角度数据,我想将它们拟合到两个冯·米塞斯分布的混合中。如下所示,数据聚集在大约 0 和 ±π 处,因此这种情况需要具有周期性边界。 我尝试使用 movMF 包来拟合这些数据的分布,但它似乎正在
我正在手动计算 Von Mises 分布的参数,并想与 Scipy Von Mises 拟合函数进行比较。 我从拟合函数中得到不一致的结果。 我的两个数据集是 d1 = [0.8pi,0.9pi] 和
我试图找到周期/包裹正态分布 (von Mises) 的均值、方差和置信区间,但在一个时间间隔内(而不是传统的 pi 区间)。我查看了堆栈溢出的解决方案here ,它很接近,但我不确定这正是我正在寻找
我正在尝试拟合 von Mises 分布,来自 scipy ( http://docs.scipy.org/doc/scipy/reference/generated/scipy.stats.vonm
迁移到 Rails 3 后,一些 RSpec 测试失败了 例子: Controller : class ProfilesController [:en, :en], :formats=>[:html]
我是一名优秀的程序员,十分优秀!