plt.scatter
нужен массив (или список) x-координат и массив y-координат. При желании может быть установлен массив цветов. С учетом Class
код может выглядеть следующим образом:
import numpy as np
import matplotlib.pyplot as plt
class Point:
def __init__(self, x_axis, y_axis, color, add_info):
self.x_axis = x_axis
self.y_axis = y_axis
self.color = color
self.add_info = add_info
N = 10
points = np.empty([N], dtype=Point)
for i in range(N):
points[i] = Point(np.random.uniform(0, 1), np.random.uniform(0, 1),
np.random.choice(['red', 'green', 'blue', 'magenta']), 1)
plt.scatter([p.x_axis for p in points], [p.y_axis for p in points], c=[p.color for p in points])
plt.show()
![sample plot](https://i.stack.imgur.com/pZA4P.png)
Хотя это интересный пример изучения работы классов, этот Способ хранения отдельных точек довольно неэффективен в использовании памяти и времени. Не рекомендуется, когда есть много точек или когда требуются сложные вычисления.
При желании класс также может получить функцию рисования. Это становится очень медленным, когда есть тысячи точек, но может показать концепцию с несколькими точками. Также обратите внимание, что в Python списки редко пересекаются с индексами, но, скорее, путем прямой итерации значений:
import numpy as np
import matplotlib.pyplot as plt
class Point:
def __init__(self, x_axis, y_axis, color, add_info):
self.x_axis = x_axis
self.y_axis = y_axis
self.color = color
self.add_info = add_info
def draw(self):
plt.scatter(self.x_axis, self.y_axis, c=self.color)
N = 10
points = [Point(np.random.uniform(0, 1), np.random.uniform(0, 1),
np.random.choice(['red', 'green', 'blue', 'magenta']), 1) for _ in range(N)]
for p in points:
p.draw()
plt.show()