如何用matplotlib和python绘制圆形?

-1 投票
3 回答
3819 浏览
提问于 2025-04-18 15:36

我可以通过 scatter 来画一个圆圈,图片上已经展示出来了。但是我想用线来连接这些圆圈,因为总共有很多个圆圈,我需要把某个圆圈的节点连接起来。谢谢。

3 个回答

0

如果你的数据点已经排好序了,使用plot命令应该没问题。如果你想从头开始画一个圆,可以用一个参数方程。

>>> import numpy as np
>>> import matplotlib.pyplot as plt
>>> t = np.linspace(0,2*np.pi, 100)
>>> x = np.cos(t)
>>> y = np.sin(t)
>>> plt.plot(x,y)
0

这里有一种方法可以做到。这段回答使用了与链接中提到的重复问题不同的方法,所以可能值得保留。

import matplotlib.pyplot as plt
from matplotlib import patches

fig = plt.figure(figsize=plt.figaspect(1.0))
ax = fig.add_subplot(111)

cen = (2.0,1.0); r = 3.0
circle = patches.Circle(cen, r, facecolor='none')
ax.add_patch(circle)
ax.set_xlim(-6.0, 6.0)
ax.set_ylim(-6.0, 6.0)

如果你手头只有 xy 的点,你可以使用 PathPatch。这里有一个教程

2

如果这些点的顺序是随机的,你可以把坐标从直角坐标系(X-Y)转换成极坐标,然后按照角度对数据进行排序:

首先,创建一些随机顺序的点:

import pylab as pl
import numpy as np

angle = np.arange(0, np.pi*2, 0.05)
r = 50 + np.random.normal(0, 2, angle.shape)

x = r * np.cos(angle)
y = r * np.sin(angle)

idx = np.random.permutation(angle.shape[0])
x = x[idx]
y = y[idx]

接着使用 arctan2() 来计算角度,并根据这个角度对数据进行排序:

angle = np.arctan2(x, y)
order = np.argsort(angle)
x = x[order]
y = y[order]

fig, ax = pl.subplots()
ax.set_aspect(1.0)
x2 = np.r_[x, x[0]]
y2 = np.r_[y, y[0]]
ax.plot(x, y, "o")
ax.plot(x2, y2, "r", lw=2)

下面是输出结果:

enter image description here

撰写回答