首页 > 解决方案 > 使用 Python 在图像上绘制从 Unity 获取的坐标

问题描述

我在 Unity 中收集播放器的数据位置,并将它们保存在 .csv 文件中。特别是我收集了游戏中玩家的 x 和 y 位置。

然后我需要在图像上绘制这些点,即游戏地图,以显示玩家在其中的位置。我正在使用Python,特别是matplotlibPIL,但我遇到了一些问题。代码如下:

from PIL import Image as img
from PIL import ImageDraw as dr
import matplotlib.pyplot as plt
import numpy as np
import pandas as pd

filename = 'player20210325-0.csv'
delimiter = ';'
domus_map_path = 'map.png'

data = pd.read_csv(filename, sep = delimiter, names=['time', 'x', 'y', 'action'], header=None)
x = data['x']
y = data['y']

domus_map = img.open(domus_map_path)
domus_map_copy = domus_map.copy()

fig, ax = plt.subplots()
ax.imshow(domus_map_copy, extent = [0, 70, -13, 13])

for p, q in zip(x, y):
    x_coord = p
    y_coord = q
    plt.scatter([x_coord], [y_coord])

plt.xlabel('X')
plt.ylabel('Y')
plt.show

这给我带来了问题;特别是,情节如下图所示:

图像上的数据图

我不知道是否清楚;问题是 y_coordinates 大约为 0,并假设负值和正值,但它们总是在增长。为了更清楚,我使用以下代码绘制 x_coordinate 和 y_coordinate 随着时间的推移:

plt.plot(time, x, color = 'b', linewidth = '3', label = 'x_coord over time')
plt.plot(time, y, color = 'k', linewidth = '3', label = 'y_coord over time')
plt.tight_layout()

plt.xlabel('time')
plt.legend()
plt.show()

结果如下:

图表中的数据图

问题是在 y 轴上,数据不是按从小到大的顺序设置的,而是根据数组内的顺序设置的。

有人可以帮助我吗?

标签: pythonmatplotlibunity3d

解决方案


推荐阅读