Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/279.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 在matplotlib内以极坐标形式绘制一端为r=0的二维线_Python_Matplotlib_Plot_Logarithm_Polar Coordinates - Fatal编程技术网

Python 在matplotlib内以极坐标形式绘制一端为r=0的二维线

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

我试图以极坐标形式绘制一些数据,所有数据都从r=0开始。我成功地用线性比例绘制了它们。然而,当我开始使用对数刻度时,结果很奇怪。我在行首和行尾都有一个记号笔,但是记号笔之间没有一条线。。。我找到了一个解决方法,将线的原点设置为r=0.1,然后显示线。但是,如果我设置了一个较小的值r=0.001,例如,我在同一个错误中再次碰撞,但坐标原点向左移动,这是意外的。你知道有什么解决办法吗,这样我就可以在日志中绘制一条从r=0到某个r的线

这里是一个mwe:

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,它可以工作。。。