【问题标题】:Polar plot in Matplotlib by mapping into Cartesian coordinateMatplotlib 中的极坐标图,通过映射到笛卡尔坐标
【发布时间】:2019-12-24 18:59:36
【问题描述】:

我有一个变量 (P),它是角度 (theta) 的函数:

在这个方程中,K 是一个常数,theta_p 等于 0,I 是第一类修正贝塞尔函数 ( order 0) 定义为:

现在,我想针对常数 K 的不同值绘制 Ptheta 的关系图。首先我计算了参数I,然后将其代入第一个方程以计算不同角度θ的P。我把它映射到笛卡尔坐标中:

x = P*cos(θ)

y = P*sin(θ)

这是我在常量 k=2.0 时使用 matplotlib 和 scipy 的 python 实现:

import numpy as np
import matplotlib.pyplot as plt
from scipy.integrate import quad

def integrand(x, a, k):
   return a*np.exp(k*np.cos(x))

theta = (np.arange(0, 362, 2))
theta_p = 0.0

X = []
Y = []

for i in range(len(theta)):
    a = (1 / np.pi)
    k = 2.0
    Bessel = quad(integrand, 0, np.pi, args=(a, k))
    I = list(Bessel)[0]
    P = (1 / (np.pi * I)) * np.exp(k * np.cos(2 * (theta[i]*np.pi/180. - theta_p)))
    x = P*np.cos(theta[i]*np.pi/180.)
    y = P*np.sin(theta[i]*np.pi/180.)
    X.append(x)
    Y.append(y)

plt.plot(X,Y,  linestyle='-', linewidth=3, color='red')
axes = plt.gca()
plt.show()

对于不同的 K 值,我应该得到一组如下图所示的图表:

(请注意,为了便于可视化,分布被绘制在单元 1 的圆圈上)

但是,上面代码生成的图表似乎与上图不相似。 知道上述实现有什么问题吗? 在此先感谢您的帮助。

这是它的样子(对于 k=2):

这些公式的参考是公式 5 和 6,您可以找到 here

【问题讨论】:

  • “上面代码生成的图和上图不一样”——长什么样子?
  • 为什么不用scipy中定义的bessel函数?:from scipy.special import i0
  • 你能添加一个参考,你从哪里得到的公式?
  • 我编辑了我的帖子并回复了您的问题

标签: python-3.x matplotlib plot scipy bessel-functions


【解决方案1】:

你的公式有误。

您的公式在单位圆上方给出了函数的delta。所以在你的函数中得到你想要的情节,只需给它加 1。

这就是你想要的,还有一些整理好的 python。 ...请注意,您可以将“P”值的整个计算作为一个 numpy 向量线,您不需要遍历索引。 ...您也可以直接在 matplotlib 中绘制极坐标图 - 您无需将其转换为笛卡尔坐标。

import numpy as np
import matplotlib.pyplot as plt
from scipy.integrate import quad

theta = np.arange(0, 2*np.pi+0.1, 2*np.pi/100)

def integrand(x, a, k):
   return a*np.exp(k*np.cos(x))

for k in np.arange(0, 5, 0.5):
    a = (1 / np.pi)
    Bessel = quad(integrand, 0, np.pi, args=(a, k))
    I = Bessel[0]    
    P = 1 + (1/(np.pi * I)) * np.exp(k * np.cos(2 * theta))
    plt.polar(theta, P)

plt.show()

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-08-05
    • 1970-01-01
    • 2015-06-17
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多