使用matplotlib的负半径函数的极坐标图

发布于 2021-01-29 14:10:06

以下python代码应在[-pi / 2,pi / 2]范围内绘制r(theta)= theta。

import matplotlib.pyplot as plt
import numpy

theta = numpy.linspace(-numpy.pi / 2, numpy.pi / 2, 64 + 1)
r = theta

plt.polar(theta, r)
plt.savefig('polar.png')

生成图:

极地图

但是,我希望它会产生:

预期极地图

r(θ)的负值似乎已被裁剪。如何使matplotlib绘制r(theta)的负值?

关注者
0
被浏览
313
1 个回答
  • 面试哥
    面试哥 2021-01-29
    为面试而生,有面试问题,就找面试哥。

    第一个情节似乎是正确的。它只是不显示负值。可以通过明确设置r轴的极限来克服此问题。

    import matplotlib.pyplot as plt
    import numpy
    
    theta = numpy.linspace(-numpy.pi / 2, numpy.pi / 2, 64 + 1)
    r = theta
    
    plt.polar(theta, r)
    plt.ylim(theta.min(),theta.max())
    plt.yticks([-1, 0,1])
    plt.show()
    

    在此处输入图片说明

    此行为基于以下假设:任何数量都应可绘制在极坐标图上,这可能对有关相对数量的技术问题有所帮助。例如,您可能会问周期系统中某个量与其平均值的偏差。在这种情况下,matplotlib使用的约定非常适合。

    从更数学(理论)的角度来看,人们可能会认为负半径是原点上的点反射。为了复制这种行为,需要将负值的点旋转rπ。因此,可以通过以下代码重现问题的预期图形

    import matplotlib.pyplot as plt
    import numpy as np
    
    theta = np.linspace(-np.pi / 2, np.pi / 2, 64 + 1)
    r = theta
    
    plt.polar(theta+(r<0)*np.pi, np.abs(r))
    
    plt.show()
    

    在此处输入图片说明



知识点
面圈网VIP题库

面圈网VIP题库全新上线,海量真题题库资源。 90大类考试,超10万份考试真题开放下载啦

去下载看看