2017-01-13 3 views
2

Gibt es eine Möglichkeit, die Daten aus einem Array zu extrahieren, was einer Linie eines Konturplotts in Python entspricht? I.e. Ich habe den folgenden Code:Python: Werte des Arrays erhalten, die Höhenlinien entsprechen

n = 100 
x, y = np.mgrid[0:1:n*1j, 0:1:n*1j] 

plt.contour(x,y,values) 

wo Werte mit Daten einen 2D-Array ist (ich die Daten in einer Datei gespeichert, aber es scheint nicht möglich zu sein, es hier zu laden). Das Bild unten zeigt das entsprechende Konturplot. Meine Frage ist, ob es möglich ist, genau die Daten von Werten zu erhalten, die z.B. zur linken Höhenlinie in der Handlung?

enter image description here

Antwort

1

plt.contour eine QuadContourSet zurückgibt. Von dort aus können wir auf die einzelnen Zeilen zugreifen mit:

cs.collections[0].get_paths() 

Dies gibt alle einzelnen Pfade zurück. Um auf die tatsächlichen x, y Standorte zuzugreifen, müssen wir das vertices Attribut jedes Pfades betrachten. Die erste gezeichnete Kontur sollte zugänglich sein mit:

X, Y = cs.collections[0].get_paths()[0].vertices.T 

Siehe das folgende Beispiel, um zu sehen, wie man auf eine der gegebenen Linien zugreift. Im Beispiel greife ich nur die erste:

import matplotlib.pyplot as plt 
import numpy as np 

n = 100 
x, y = np.mgrid[0:1:n*1j, 0:1:n*1j] 

values = x**0.5 * y**0.5 

fig1, ax1 = plt.subplots(1) 
cs = plt.contour(x, y, values) 

lines = [] 
for line in cs.collections[0].get_paths(): 
    lines.append(line.vertices) 

fig1.savefig('contours1.png') 

fig2, ax2 = plt.subplots(1) 

ax2.plot(lines[0][:, 0], lines[0][:, 1]) 

fig2.savefig('contours2.png') 

contours1.png: enter image description here

contours2.png: enter image description here

Verwandte Themen