在matplotlib中绘制圆形轮廓线

时间:2014-07-21 20:46:14

标签: python numpy matplotlib plot scipy

我正在尝试围绕半径随机值数组的圆形轮廓线。结果应该是一堆具有不同半径的同心圆。但是我不太确定如何绘制theta,以便对于每个半径,θ的所有值都被绘制成一条线。

import random
import numpy as np 
r= sort(np.array([ random.random()*5 for i in arange(100) ]))
len(r)
theta = [t for t in linspace(0,2*pi,100)]
ax = plt.subplot(111, polar=True)
ax.plot(theta, r, 'o',color='r', linewidth=3)
ax.set_rmax(2.0)
ax.grid(True)

enter image description here

谢谢。

2 个答案:

答案 0 :(得分:1)

快速而肮脏的方法是使用np.linspace有效地绘制多边形(我认为你试图这样做):

import numpy as np
from matplotlib import pyplot as plt

# some random radii
r = np.random.rand(10)

# 1000 angles linearly spaced between 0 and 2pi
t = np.linspace(0, 2 * np.pi, 1000)

# broadcast r against t to make each a (1000, 10) array
r, t = np.broadcast_arrays(r[None, :], t[:, None])

# plot the lines
fig, ax = plt.subplots(1, 1, subplot_kw={'polar':True})
ax.plot(t, r, '-')

enter image description here

我确信必须有一种更优雅的方式来做到这一点。

答案 1 :(得分:1)

这是一个单行添加,我认为你做了什么:

import random
import numpy as np
import matplotlib.pyplot as plt
r= np.sort(np.array([ random.random()*5 for i in np.arange(100) ]))
len(r)
theta = [t for t in np.linspace(0,2*np.pi,100)]
ax = plt.subplot(111, polar=True)
ax.plot(theta, r, 'o',color='r', linewidth=3)
ax.set_rmax(2.0)
ax.grid(True)

[ax.plot(theta, rcirc*np.ones(100)) for rcirc in r.max()*np.random.rand(5)]

plt.show()