2017-03-23 16 views
1

次のpythonコードでは、範囲[-pi/2、pi/2]にr(theta)= thetaをプロットする必要があります。matplotlibを使って負の半径を持つ関数の極座標

polar plot

しかし、私はそれを生成するために期待する:

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') 

これは、プロットを作成し

expected polar plot

R(シータ)の負の値があるように見えますクリップされた。 matplotlibがr(theta)の負の値をプロットするようにするにはどうすればよいですか?

+1

によって再現することができ、この問題がクローズやったことがなかったように見えます。 https://github.com/matplotlib/matplotlib/issues/2203 – 1N5818

+0

@Alexander Kleinhansの問題は、これとは別の問題です。それが議論する問題は、負の半径値をプロットすることができないのではなく、負の半径値のグリッドを持つことができないことです。 – Vaelus

+0

このリンクされた問題が実際に関連しているかどうかはわかりませんが、そうであれば今までに解決されています。 – ImportanceOfBeingErnest

答えて

1

最初のプロットは正しいようです。負の値は表示されません。これは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() 

enter image description here

この現象は、任意の量は相対量で技術的な質問のために有益であるかもしれない、極座標グラフ上plottableであるべきであるという仮定に基づいています。例えば。周期的なシステムにおける量の平均値からの偏差について質問するかもしれない。この場合、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() 

enter image description here

+0

負の半径は反対の方向の正の半径と同じであるため、期待されるプロットのように見えるはずです。 wolfram alphaとの比較:http://www.wolframalpha.com/input/?i=plot+r+%3D+theta+from+-pi+%2F+2+to+pi+%2F+2 – Vaelus

+0

これは良い一般的な回避策ですが、しかし、それは一種のハッキーです。私は1つではないかもしれないことを認識しています。 – Vaelus