Можно сделать так:
import matplotlib.pyplot as plt
import numpy as np
x = [1,2,3,4] # координаты x
y = [1,2,3,4] # координаты y
ab = [[1,1], [1,2], [3,7], [15,2]] # пропорции для каждой круговой диаграммы
# порядок соотвутствует порядку кааординат
r = min(min(abs(np.diff(x))), min(abs(np.diff(y))))*.4 # вычисление радиуса круговой диаграммы
# смысл этого расчета - получить радиус заведомо меньший самого маленького
# расстояния между соседними диаграммами, чтобы избежать наложения
fig, ax = plt.subplots(figsize=(5,5)) # создание фигуры и холста
for i in range(len(ab)):
wedges, texts = ax.pie(ab[i], # отрисовка диаграм - пропорции из списка
center=(x[i],y[i]), # центры диаграмм в соответствии с координатами
radius =r, # радиус, который мы получили ранее
colors=["peachpuff", "sandybrown"], # цвета, количество = количеству пропорций
frame=True) # отрисовка линий координат
ax.legend(wedges, ["a", "b"],
title="Proportions",
loc="lower right",
)
plt.tight_layout()
plt.show()
получите:
