У меня есть следующая строка 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()
Вывод выглядит следующим образом:
Я хочу разместить количество ячеек по оси x и высоты по оси y, как я могусделай это? Также Как мне сгруппировать средние высоты и убрать высокие поля, используя приведенный выше график?