在matplotlib中绘制圆形轮廓线

2 投票
2 回答
1513 浏览
提问于 2025-04-18 14:09

我正在尝试在一组随机半径值周围绘制圆形轮廓线。最终的结果应该是一堆同心圆,每个圆的半径都不同。不过,我不太确定怎么绘制角度(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 个回答

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

在这里输入图片描述

不过,我相信一定还有更优雅的方法可以做到这一点。

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

撰写回答