Граф графика с использованием списка Python - PullRequest
0 голосов
/ 25 октября 2019

У меня есть следующая строка json:

data.txt

Эта строка json представляет четыре угла ограничительной рамки. В прикрепленном файле у меня 61 ограничивающийкоробки. Моя цель состоит в том, чтобы найти высоту каждой ограничительной рамки и представить ее на графике, а также удалить поля, слишком высокие по высоте.

Вот мой код для считывания json и построения высот различных блоков

all_x_coordinates=[]
all_y_coordinates=[]
all_heights=[]

with open('data.txt') as json_file:
    """
        read json file and append the y coordinates to a list named 'all_y_coordinates'
    """
    data = json.load(json_file)
    for box_num in data['result']:
        for box_coordinates in data['result'][box_num]:               
            all_y_coordinates.append(box_coordinates[1])

Координаты ограничивающей рамки внутри data.txt визуально выглядят следующим образом:

(x1, y1) ................... .... (x2, y2)
.
.
(x4, y4) ....................... (x3, y3)

Как видите, высоту рамки можно рассчитать, используя координаты y (y4-y1) дает нам высоту над ограничительной рамкой

print('length of all_y_coordinates', len(all_y_coordinates))
n = 4 
final = [all_y_coordinates[i * n:(i + 1) * n] for i in range((len(all_y_coordinates) + n - 1) // n )]  
print('final', final)

Это занимает все укоординирует и разбивает их на подсписок из 4

for index, num in enumerate(final):

    print(index, num[0], num[3])
    subtract=num[0]-num[3]
    heights.append(abs(subtract))

print('heights',heights, len(heights))

Heights - список, содержащий высоты всех блоков

for index2, num2 in enumerate(heights):
    print('box number',index2, 'box height',num2)

Этот код отображает высоты всех ограничивающих рамок

res = [heights[i + 1] - heights[i] for i in range(len(heights)-1)] 
myposlist = [ abs(x) for x in res]

print('length of myposlist', myposlist)

#ar=sorted(myposlist)
print(myposlist)
print('length of list ', len(myposlist))
ax= sns.distplot(myposlist)
ax.set_title('height')
ax.set_ylabel('values')
plt.show()

Вывод выглядит следующим образом:

enter image description here

Я хочу разместить количество ячеек по оси x и высоты по оси y, как я могусделай это? Также Как мне сгруппировать средние высоты и убрать высокие поля, используя приведенный выше график?

...