Matplot lib - создать точечный график с точками, которые заполняют доступное пространство - PullRequest
0 голосов
/ 02 мая 2020

Я могу создать точечный график следующим образом:

fig, ax = plt.subplots()
x1 = [1, 1, 2]
y1 = [1, 2, 1]
x2 = [2]
y2 = [2]
ax.scatter(x1, y1, color="red", s=500)
ax.scatter(x2, y2, color="blue", s=500)

, который дает

enter image description here

Что-то, что я хотел бы, это что-то как следующее (извиняюсь за плохую работу покраски):

enter image description here

Я строю данные, которые являются целыми значениями, поэтому все они находятся в сетке , Я хотел бы иметь возможность контролировать размер маркера разброса, чтобы у меня было белое пространство вокруг точек, или я мог сделать точки достаточно большими, чтобы вокруг них не было пустого пространства (как я делал в выше изображение для рисования).

Примечание - в идеале решение должно быть в чистом matplotlib с использованием интерфейса OOP, как предлагается в документации.

1 Ответ

2 голосов
/ 02 мая 2020
import matplotlib.pyplot as plt
import matplotlib as mpl

# X and Y coordinates for red circles
red_xs = [1,2,3,4,1,2,3,4,1,2,1,2]
red_ys = [1,1,1,1,2,2,2,2,3,3,4,4]

# X and Y coordinates for blue circles
blu_xs = [3,4,3,4]
blu_ys = [3,3,4,4]

# Plot with a small markersize
markersize = 5
fig, ax = plt.subplots(figsize=(3,3))
ax.plot(red_xs, red_ys, marker="o", color="r", linestyle="", markersize=markersize)
ax.plot(blu_xs, blu_ys, marker="o", color="b", linestyle="", markersize=markersize)
plt.show()

smallmarkers

# Plot with a large markersize
markersize = 50
fig, ax = plt.subplots(figsize=(3,3))
ax.plot(red_xs, red_ys, marker="o", color="r", linestyle="", markersize=markersize)
ax.plot(blu_xs, blu_ys, marker="o", color="b", linestyle="", markersize=markersize)
plt.show()

enter image description here

# Plot with using patches and radius
r = 0.5
fig, ax = plt.subplots(figsize=(3,3))
for x, y in zip(red_xs, red_ys):
    ax.add_patch(mpl.patches.Circle((x,y), radius=r, color="r"))
for x, y in zip(blu_xs, blu_ys):
    ax.add_patch(mpl.patches.Circle((x,y), radius=r, color="b"))
ax.autoscale()
plt.show()

enter image description here

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...