2

我正在尝试制作一个极地图1/t。到目前为止我所拥有的如下(这可能是错误的)。我怎样才能完成这个或使它工作?

from pylab import *
import matplotlib.pyplot as plt

theta = arange(0, 6 * pi, 0.01)


def f(theta):
    return 1 / theta

Mathematica 中的极坐标图

4

3 回答 3

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

one_over_theta

如果放大,它看起来会更好:

飞涨

于 2013-04-10T22:08:32.927 回答
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()

在此处输入图像描述

于 2013-04-10T22:16:08.440 回答
1

如果你想要一个像 Mathematica 给你的正方形图,标准的 plot 函数只需要一个 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))

给我你版本的范围。

于 2013-04-10T22:11:09.377 回答