2017-04-13 1 views
1

Ich habe eine Liste von Punkten:Verwendung von Kontur und contourf

pointList = [ [x1,y1,z1], [x2,y2,z2], ... [xn,yn,zn]] 

und ich möchte ein Konturdiagramm dieser Menge von Punkten zeichnen.

Ich versuche:

import matplotlib.pyplot as plt 
pointList = [ [x1,y1,z1], [x2,y2,z2], ... [xn,yn,zn]] 
x = [el[0] for el in pointList] 
y = [el[1] for el in pointList] 
z = [el[2] for el in pointList] 
plt.contourf(x,y,z) 
plt.show() 

aber ich habe diese Ausnahme:

TypeError: Input z must be a 2D array. 

Diese seltsame ist, weil in der Dokumentation von matplotlib Ich finde:

Call signatures: 
contour(Z) 
make a contour plot of an array Z. The level values are chosen automatically. 
contour(X,Y,Z) 
X, Y specify the (x, y) coordinates of the surface 

So I don‘ Ich verstehe, warum es fehlschlägt ...

+0

Bilden Ihre Punkte tatsächlich eine Oberfläche? X und Y sind die eindeutigen x- und y-Werte, die für die Oberfläche verwendet werden. Es ist nicht für verstreute Daten verwendet werden – Suever

+0

nicht sicher zu verstehen. Wie soll ich "tatsächlich" eine Oberfläche erstellen? – rudy

+4

Mögliches Duplikat von [Kontur der Streuung erstellen] (http://stackoverflow.com/questions/18764814/make-contour-of-scatter) – Suever

Antwort

1

In beiden Fällen, contour(Z) oder contour(X,Y,Z), muss der Eingang Z ein 2D-Array sein.

Wenn Ihre Daten nicht auf einem Raster liegen, müssen Sie sie entweder zu einem Raster interpolieren oder Sie können keine Kontur verwenden.

Eine einfache Alternative ist die Verwendung tricontour.

import matplotlib.pyplot as plt 
import numpy as np 
pointList = [ [x1,y1,z1], [x2,y2,z2], ... [xn,yn,zn]] 
pointList = np.array(pointList) 
plt.tricontour(pointList[:,0],pointList[:,1],pointList[:,2]) 
plt.show() 

Es ist ein gutes Beispiel, das mit einem tricontourcontour interpolierten Daten vergleicht: tricontour_vs_griddata.

Sie können auch sehen: