我正试图制作1/t
的极坐标图。到目前为止我所拥有的是(可能是错误的)。我该如何完成或使其有效?
from pylab import *
import matplotlib.pyplot as plt
theta = arange(0, 6 * pi, 0.01)
def f(theta):
return 1 / theta
答案 0 :(得分:9)
我认为问题是f(theta)
的第一个值是1/0 = inf
theta = np.arange(0, 6*np.pi, .01)[1:]
def f(x):
return 1/x
plt.polar(theta, f(theta))
如果你放大它看起来更好:
答案 1 :(得分:3)
from mpl_toolkits.axes_grid.axislines import SubplotZero
from matplotlib.ticker import MultipleLocator, FuncFormatter
import matplotlib.pyplot as plt
import numpy as np
plt.ion()
fig = plt.figure(1)
ax = SubplotZero(fig, 111)
fig.add_subplot(ax)
for dir in ax.axis:
ax.axis[dir].set_visible(dir.endswith("zero"))
ax.set_xlim(-.35,.4)
ax.set_ylim(-.25,.45)
ax.set_aspect('equal')
tick_format = lambda x, i: '' if x == 0.0 else '%.1f' % x
for a in [ax.xaxis, ax.yaxis]:
a.set_minor_locator(MultipleLocator(0.02))
a.set_major_formatter(FuncFormatter(tick_format))
theta = np.arange(2*np.pi/3,6*np.pi,0.01)
r = 1 / theta
ax.plot(r*np.cos(theta), r*np.sin(theta), lw=2)
plt.show()
raw_input()
答案 2 :(得分:1)
如果你想要像Mathematica给你的方形图,标准的绘图函数只需要一个x值数组和一个y值数组。这里,f(theta)
是半径,cos
和sin
给出x和y方向,所以
plt.plot(f(theta)*cos(theta), f(theta)*sin(theta))
应该做的工作。这将显示所有数据,而不是像Mathematica中那样巧妙选择的子集,因此您可能希望限制它。例如:
plt.xlim((-0.35,0.43))
plt.ylim((-0.23,0.45))
给出了你版本中的范围。