Frage

ich einige Oberflächendaten, die durch ein externes Programm als XYZ-Werte erzeugt wird. Ich möchte die folgenden Grafiken erstellen, mit matplotlib:

  • Surface Plot
  • Konturplot
  • Konturdiagramm mit einer Fläche Grundstück überschichtet

Ich habe an mehreren Beispielen gesucht Oberflächen und Konturen in matplotlib Plotten -. Aber der Z-Wert scheint eine Funktion von X und Y d.h. Y ~ f (X, Y) zu sein

Ich gehe davon aus, dass ich irgendwie meine Y Variablen umwandeln benötigen, aber ich habe kein Beispiel noch nicht gesehen, das zeigt, wie dies zu tun.

Also, meine Frage ist: Gegeben sei eine Menge von (X, Y, Z) Punkte, wie kann ich Oberflächen- und Konturplots aus diesen Daten erzeugen

BTW, nur um zu klären, ich will nicht, Streudiagramme erstellen. Auch obwohl ich matplotlib im Titel erwähnt, bin ich nicht abgeneigt, mit rpy (2), wenn das wird mir erlauben, diese Diagramme zu erstellen.

War es hilfreich?

Lösung

für Sie eine Konturplot Sie Ihre Daten in einem regelmäßigen Raster interpolieren muss http://www.scipy.org/Cookbook/Matplotlib/Gridding_irregularly_spaced_data

ein kurzes Beispiel:

>>> xi = linspace(min(X), max(X))
>>> yi = linspace(min(Y), max(Y))
>>> zi = griddata(X, Y, Z, xi, yi)
>>> contour(xi, yi, zi)

für die Oberfläche http: //matplotlib.sourceforge. net / examples / mplot3d / surface3d_demo.html

>>> from mpl_toolkits.mplot3d import Axes3D
>>> fig = figure()
>>> ax = Axes3D(fig)
>>> xim, yim = meshgrid(xi, yi)
>>> ax.plot_surface(xim, yim, zi)
>>> show()

>>> help(meshgrid(x, y))
    Return coordinate matrices from two coordinate vectors.
    [...]
    Examples
    --------
    >>> X, Y = np.meshgrid([1,2,3], [4,5,6,7])
    >>> X
    array([[1, 2, 3],
           [1, 2, 3],
           [1, 2, 3],
           [1, 2, 3]])
    >>> Y
    array([[4, 4, 4],
           [5, 5, 5],
           [6, 6, 6],
           [7, 7, 7]])

Kontur in 3D http: //matplotlib.sourceforge. net / examples / mplot3d / contour3d_demo.html

>>> fig = figure()
>>> ax = Axes3D(fig)
>>> ax.contour(xi, yi, zi) # ax.contourf for filled contours
>>> show()

Andere Tipps

Mit Pandas und numpy zu importieren und manipulieren Daten, mit matplot.pylot.contourf das Bild zu zeichnen

import numpy as np
import pandas as pd
import matplotlib.pyplot as plt
from matplotlib.mlab import griddata

PATH='/YOUR/CSV/FILE'
df=pd.read_csv(PATH)

#Get the original data
x=df['COLUMNNE']
y=df['COLUMNTWO']
z=df['COLUMNTHREE']

#Through the unstructured data get the structured data by interpolation
xi = np.linspace(x.min()-1, x.max()+1, 100)
yi = np.linspace(y.min()-1, y.max()+1, 100)
zi = griddata(x, y, z, xi, yi, interp='linear')

#Plot the contour mapping and edit the parameter setting according to your data (http://matplotlib.org/api/pyplot_api.html?highlight=contourf#matplotlib.pyplot.contourf)
CS = plt.contourf(xi, yi, zi, 5, levels=[0,50,100,1000],colors=['b','y','r'],vmax=abs(zi).max(), vmin=-abs(zi).max())
plt.colorbar()

#Save the mapping and save the image
plt.savefig('/PATH/OF/IMAGE.png')
plt.show()

Beispiel Bilder

Konturdiagramm mit rpy2 + ggplot2:

from rpy2.robjects.lib.ggplot2 import ggplot, aes_string, geom_contour
from rpy2.robjects.vectors import DataFrame

# Assume that data are in a .csv file with three columns X,Y,and Z
# read data from the file
dataf = DataFrame.from_csv('mydata.csv')

p = ggplot(dataf) + \
    geom_contour(aes_string(x = 'X', y = 'Y', z = 'Z'))
p.plot()

Oberflächen Grundstück mit rpy2 + Gitter:

from rpy2.robjects.packages import importr
from rpy2.robjects.vectors import DataFrame
from rpy2.robjects import Formula

lattice = importr('lattice')
rprint = robjects.globalenv.get("print")

# Assume that data are in a .csv file with three columns X,Y,and Z
# read data from the file
dataf = DataFrame.from_csv('mydata.csv')

p = lattice.wireframe(Formula('Z ~ X * Y'), shade = True, data = dataf)
rprint(p)
Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top