Как я могу получить значения (x, y) линии, которые построены на графике контура?
Есть ли простой способ получить значения (x, y) линии контура, которые были построены следующим образом:
import matplotlib.pyplot as plt
x = [1,2,3,4]
y = [1,2,3,4]
m = [[15,14,13,12],[14,12,10,8],[13,10,7,4],[12,8,4,0]]
cs = plt.contour(x,y,m, [9.5])
plt.show()
Ответы
Ответ 1
Посмотрите на свойство коллекций возвращенного ContourSet. В частности, метод get_paths() первой коллекции возвращает парные точки, составляющие каждый отрезок.
cs.collections[0].get_paths()
Чтобы получить массив координат NumPy, используйте атрибут Path.vertices
.
p1 = cs.collections[0].get_paths()[0] # grab the 1st path
coor_p1 = p1.vertices
Ответ 2
Просматривать коллекции и извлекать пути и вершины - не самая прямая и самая быстрая вещь. Возвращенный объект Contour фактически имеет атрибуты для сегментов с помощью cs.allsegs
, который возвращает вложенный список формы [уровень] [элемент] [vertex_coord]:
num_levels = len(cs.allsegs)
num_element = len(cs.allsegs[0]) # in level 0
num_vertices = len(cs.allsegs[0][0]) # of element 0, in level 0
num_coord = len(cs.allsegs[0][0][0]) # of vertex 0, in element 0, in level 0
Следовательно, вершины всех путей можно извлечь как:
cs.allsegs[i][j] # for element j, in level i
См. ссылку:https://matplotlib.org/3.1.1/api/contour_api.html