Применять изменения только к таблице внутри неизвестных границ (стен) - PullRequest
0 голосов
/ 25 сентября 2018

Я хочу, чтобы мой цикл изменял только ячейку таблицы с 0 на 5 внутри "стен".«Стены» определяются пользователем и могут иметь любую форму на основе координат.Сюжет предназначен только для визуализации.

import matplotlib.pyplot as plt 
import pandas as pd

wallPointsX = [5,5,30,30,55,55,5]
wallPointsY = [5,30,30,55,55,5,5]

df = pd.DataFrame(0, index=range(60), columns=range(60))

for x in range(0, 60):
    for y in range(0, 60):
        df[x][y] = 5 #Should only apply inside "walls"

plt.plot(wallPointsX, wallPointsY)
plt.pcolor(df)
plt.show()

Результат графика

1 Ответ

0 голосов
/ 25 сентября 2018

Хорошо, у меня ушло некоторое время, но было весело делать это.Идея здесь состоит в том, чтобы сначала создать непрерывную path из координат, которые определяют стены.Далее создайте объект Path.Теперь вы перебираете каждую точку в DataFrame и затем смотрите, содержит ли созданная Path эту (x, y) точку, используя contains_point.Мне также пришлось использовать условие x==55 and (5<y<=55) в операторе if, чтобы включить столбец, примыкающий к самой правой стене.

import matplotlib.path as mplPath
import numpy as np

wallPointsX = [5,5,30,30,55,55,5]
wallPointsY = [5,30,30,55,55,5,5]

# Create a continuous path across the wall coordinates
path = np.array([list(i) for i in zip(wallPointsX, wallPointsY)])
Path = mplPath.Path(path)

df = pd.DataFrame(0, index=range(60), columns=range(60))

for x in range(0, 60):
    for y in range(0, 60):
        if Path.contains_point((x,y)) or (x==55 and (5<y<=55)):
            df[x-1][y-1] = 5 #Should only apply inside "walls"

plt.plot(wallPointsX, wallPointsY)
plt.pcolor(df)

Вывод

enter image description here

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