Python 在matplotlib内以极坐标形式绘制一端为r=0的二维线
我试图以极坐标形式绘制一些数据,所有数据都从r=0开始。我成功地用线性比例绘制了它们。然而,当我开始使用对数刻度时,结果很奇怪。我在行首和行尾都有一个记号笔,但是记号笔之间没有一条线。。。我找到了一个解决方法,将线的原点设置为r=0.1,然后显示线。但是,如果我设置了一个较小的值r=0.001,例如,我在同一个错误中再次碰撞,但坐标原点向左移动,这是意外的。你知道有什么解决办法吗,这样我就可以在日志中绘制一条从r=0到某个r的线 这里是一个mwe:Python 在matplotlib内以极坐标形式绘制一端为r=0的二维线,python,matplotlib,plot,logarithm,polar-coordinates,Python,Matplotlib,Plot,Logarithm,Polar Coordinates,我试图以极坐标形式绘制一些数据,所有数据都从r=0开始。我成功地用线性比例绘制了它们。然而,当我开始使用对数刻度时,结果很奇怪。我在行首和行尾都有一个记号笔,但是记号笔之间没有一条线。。。我找到了一个解决方法,将线的原点设置为r=0.1,然后显示线。但是,如果我设置了一个较小的值r=0.001,例如,我在同一个错误中再次碰撞,但坐标原点向左移动,这是意外的。你知道有什么解决办法吗,这样我就可以在日志中绘制一条从r=0到某个r的线 这里是一个mwe: import pylab import num
import pylab
import numpy
R = [0.001,1]
Theta = [0,0]
fig = pylab.figure()
host = fig.add_subplot(111, polar=True)
host.plot(Theta,R,color='r',ls='-',lw=2,marker='D',ms=6)
host.set_rlim(0)
host.set_rscale('log')
pylab.show()
你的问题是因为log0.0是-无穷大
In [3]: math.log10(0.3)
Out[3]: -0.5228787452803376
In [4]: math.log10(0.1)
Out[4]: -1.0
In [5]: math.log10(0.01)
Out[5]: -2.0
In [6]: math.log10(0.001)
Out[6]: -3.0
In [7]: math.log10(0.0001)
Out[7]: -4.0
In [8]: math.log10(0.000)
---------------------------------------------------------------------------
ValueError Traceback (most recent call last)
<ipython-input-8-bc8e35603e36> in <module>()
----> 1 math.log10(0.000)
ValueError: math domain error
你需要仔细考虑对数刻度的起始点,如果你希望它从0点开始,你的值需要从1开始,Log101.0=0。< /P> < P>尽管Steve Barnes是正确的,但这并不是全部。matplotlib处理对数极坐标图的方式似乎有些奇怪
一小段示例代码:import matplotlib.pyplot as plt
import numpy as np
# exponential spiral
theta = np.linspace(0, 20*pi, 10000)
r = np.exp(-theta)
fig = plt.figure()
ax = fig.add_subplot(111, polar=True)
ax.plot(theta, r)
ax.set_rscale('log')
这有点奇怪:
这可能是y限制的问题:
>>> ax.get_ylim()
(5.1579e-28, 0.0001)
下限等于R数据中的最低值,因此看起来很好。然而,上限是奇数,数据中的最高值是1,并且该螺旋看起来不像对数刻度线性螺旋上的指数螺旋
如果我强制y限制或r限制:
>>> ax.set_rlim((r[-1],1))
限制已更改,但图形未更改。最有趣的是,如果我把光标放在螺旋线的外端,图形窗口报告的r值是1。如果我将光标放在外边,则该值非常接近1/r[-1],即2 x 10^27
所以,至少在matplotlib的一些版本中,我有1.3.1,对数极坐标图被破坏了。我的猜测是,问题不知何故在于polar.py interact中的对数Y标度和transfomr_non_仿射。这当然是显而易见的。我忘了把log scale设置为0 setrlim0意味着将log和它本身设置为x值。我会试着用1代替0.1来看看。。。显然是数学问题,但混淆的是,将空值移到1确实改变了我的绘图,所以我最终使用0.1,它可以工作。。。