У меня есть некоторые координаты, которые я хочу отобразить поверх изображения с нужным размером и метками осей. Координаты от -750 до +750 по оси X и от -400 до +450 (не +400) по оси Y выглядят следующим образом:
[('-397.91', '58.91'), ('-569.73', '179.18'), ('-461.73', '306.82'), ('-199.09', '186.55'), ('-348.82', '-169.36'), ('-125.45', '-243.00'), ('4.64', '-267.55'), ('110.18', '-265.09'), ('267.27', '-12.27'), ('-687.55', '390.27')]
Изображение, которое будет используется в качестве фона:
Предполагаемый результат выглядит примерно так: (Кроме того, в верхнем левом кармане есть мяч до девяти видимых на экране.)
Для этого я написал следующее.
#Conversion of dataframe to array of tuples:
plotdata = list(data.to_records(index=False)) #data is the dataframe of coordinates
print(plotdata)
img = plt.imread("American-style pool table diagram.png")
fig = plt.figure(figsize = (15, 9))
fig, ax = plt.subplots()
fig.set_size_inches(15, 9)
ax.imshow(img, extent=[-750, 750, -400, 450], zorder=1)
x, y = zip(*plotdata)
plt.scatter(x, y, data=data, color='red', zorder=2)
Я смотрю две проблемы.
- Когда строка
ax.imshow(img, extent=[-750, 750, -400, 450], zorder=1)
закомментирована, чтобы показать только координаты, я получаю все координаты по прямой линии (вероятно, в том порядке, в котором они появляются в plotdata
list) вместо предполагаемых местоположений. Выглядит это так:
Когда код запускается как таковой, когда изображение отображается под графиком, метки осей искажаются, и вся диаграмма рассеяния сжимается до крошечной области в центре изображения.
Что может быть проблемой с соотношением сторон изображения и как это исправить, чтобы точки отображались должным образом в нужных местах поперек изображения?