Линии могут быть представлены и нарисованы через коллекцию линий. Поскольку график, по-видимому, имеет некоторую вращательную симметрию, может быть полезно установить соотношение сторон 1.
Альтернативой рисованию линий может быть цвет точек в зависимости от их зоны.
import numpy as np
import matplotlib.pyplot as plt
from matplotlib.collections import LineCollection
# first, create some dummy test data
N = 500
theta = np.random.normal(0, 0.15, N) + np.random.randint(0, 7, N) * 2 * np.pi / 7 + np.pi
r = np.random.normal(1, 0.2, N) ** 2 * 1000
x = r * np.cos(theta)
y = r * np.sin(theta)
fig, axes = plt.subplots(ncols=2, figsize=(9, 4))
for ax in axes:
if ax == axes[0]:
ax.scatter(x, y, color='limegreen', s=5)
# create and draw seven line segments
segs = np.zeros((14, 2))
for i in range(0, 14, 2):
segs[i, 0] = 5000 * np.cos(2 / 7 * i * np.pi)
segs[i, 1] = 5000 * np.sin(2 / 7 * i * np.pi)
line_segments = LineCollection([segs], linewidths=1, colors='crimson', linestyle='solid')
ax.add_collection(line_segments)
else:
# color each dot depending on its zone
z = np.floor((theta) / (2 * np.pi) * 7)
cmap = plt.cm.get_cmap('Set1', 7)
ax.scatter(x, y, c=z, cmap=cmap, s=5)
ax.set_ylabel("Particle Y Position (mm)")
ax.set_xlabel("Particle X Position (mm)")
ax.set_title("Particle by Radial Position")
ax.set_xlim(-2000, 2000)
ax.set_ylim(-2000, 2000)
ax.set_aspect(1)
plt.tight_layout()
plt.show()
![resulting plot](https://i.stack.imgur.com/V24ay.png)