使用 matplotlib 创建具有径向对称的形状

Create shapes with radial symmetry using matplotlib

我正在尝试使用 python 生成对称的圆形图像,但找不到简单的方法。

这是我想要的示例:

到目前为止,我列出了流程,但我找不到实现它们的简单方法。:

有简单的方法吗?

我会使用极坐标图,那么这只是计算坐标的问题。为此,我使用 np.linspace 并结合三角圆的划分、相同的点移动 10° 和零点:

import matplotlib.pyplot as plt
from itertools import chain

fig, ax = plt.subplots(subplot_kw={'projection': 'polar'})
ax.grid(False)
ax.xaxis.set_visible(False)
ax.yaxis.set_visible(False)

n = 6

# division of the circle
a = np.linspace(0, 2*np.pi, n+1)

# angles
theta = list(chain.from_iterable(zip(a, np.zeros(n+1), a+(np.pi/180*10))))

# distance to center
r = np.tile([1,0,1], n+1)

# plotting line
ax.plot(theta, r)
# plotting fill (needs an extra (0,0) point)
ax.fill(theta+[0], list(r)+[0], alpha=0.2)

示例:

带有循环的示例

import matplotlib.pyplot as plt
import numpy as np
from itertools import chain

fig, axes = plt.subplots(ncols=4, nrows=3, subplot_kw={'projection': 'polar'})

axes = axes.flatten()

def plot_shape(ax, n=3, delta=np.pi/180*10):
    ax.grid(False)
    ax.xaxis.set_visible(False)
    ax.yaxis.set_visible(False)

    a = np.linspace(0, 2*np.pi, n+1)-delta/2
    theta = list(chain.from_iterable(zip(a, np.zeros(n+1), a+delta)))
    r = np.tile([1,0,1], n+1)

    ax.plot(theta, r)
    ax.fill(theta+[0], list(r)+[0], alpha=0.2)

for i in range(len(axes)):
    axes[i].set_title(f'n = {i+1}')
    plot_shape(axes[i], n=i+1)

plt.tight_layout()